@copilotkitnext/angular 1.52.0-next.8 → 1.52.1-next.0

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 (73) hide show
  1. package/README.md +225 -432
  2. package/dist/README.md +225 -432
  3. package/dist/fesm2022/copilotkitnext-angular.mjs +322 -164
  4. package/dist/fesm2022/copilotkitnext-angular.mjs.map +1 -1
  5. package/dist/lib/agent.d.ts +20 -20
  6. package/dist/lib/components/chat/copilot-chat-assistant-message.d.ts +46 -46
  7. package/dist/lib/components/chat/copilot-chat-message-view.d.ts +126 -126
  8. package/dist/lib/components/chat/copilot-chat-tool-calls-view.d.ts +23 -23
  9. package/dist/lib/components/chat/copilot-chat-user-message-branch-navigation.d.ts +6 -6
  10. package/dist/lib/components/chat/copilot-chat-user-message.d.ts +6 -6
  11. package/dist/lib/components/chat/copilot-chat-view-scroll-view.d.ts +18 -18
  12. package/dist/lib/components/chat/copilot-chat-view.d.ts +54 -54
  13. package/dist/lib/components/chat/copilot-chat.d.ts +18 -18
  14. package/dist/lib/config.d.ts +2 -0
  15. package/dist/lib/copilotkit.d.ts +7 -1
  16. package/dist/lib/license-watermark.d.ts +1 -0
  17. package/dist/lib/render-tool-calls.d.ts +23 -23
  18. package/dist/styles.css +3 -0
  19. package/package.json +18 -18
  20. package/dist/esm2022/copilotkitnext-angular.mjs +0 -5
  21. package/dist/esm2022/index.mjs +0 -2
  22. package/dist/esm2022/lib/agent-context.mjs +0 -25
  23. package/dist/esm2022/lib/agent.mjs +0 -73
  24. package/dist/esm2022/lib/chat-config.mjs +0 -35
  25. package/dist/esm2022/lib/chat-state.mjs +0 -18
  26. package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message-buttons.mjs +0 -344
  27. package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message-renderer.mjs +0 -260
  28. package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message-toolbar.mjs +0 -22
  29. package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message.mjs +0 -415
  30. package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message.types.mjs +0 -2
  31. package/dist/esm2022/lib/components/chat/copilot-chat-audio-recorder.mjs +0 -196
  32. package/dist/esm2022/lib/components/chat/copilot-chat-buttons.mjs +0 -299
  33. package/dist/esm2022/lib/components/chat/copilot-chat-input-defaults.mjs +0 -39
  34. package/dist/esm2022/lib/components/chat/copilot-chat-input.mjs +0 -634
  35. package/dist/esm2022/lib/components/chat/copilot-chat-input.types.mjs +0 -10
  36. package/dist/esm2022/lib/components/chat/copilot-chat-message-view-cursor.mjs +0 -27
  37. package/dist/esm2022/lib/components/chat/copilot-chat-message-view.mjs +0 -269
  38. package/dist/esm2022/lib/components/chat/copilot-chat-message-view.types.mjs +0 -2
  39. package/dist/esm2022/lib/components/chat/copilot-chat-textarea.mjs +0 -139
  40. package/dist/esm2022/lib/components/chat/copilot-chat-tool-calls-view.mjs +0 -36
  41. package/dist/esm2022/lib/components/chat/copilot-chat-toolbar.mjs +0 -20
  42. package/dist/esm2022/lib/components/chat/copilot-chat-tools-menu.mjs +0 -203
  43. package/dist/esm2022/lib/components/chat/copilot-chat-user-message-branch-navigation.mjs +0 -118
  44. package/dist/esm2022/lib/components/chat/copilot-chat-user-message-buttons.mjs +0 -182
  45. package/dist/esm2022/lib/components/chat/copilot-chat-user-message-renderer.mjs +0 -28
  46. package/dist/esm2022/lib/components/chat/copilot-chat-user-message-toolbar.mjs +0 -25
  47. package/dist/esm2022/lib/components/chat/copilot-chat-user-message.mjs +0 -328
  48. package/dist/esm2022/lib/components/chat/copilot-chat-user-message.types.mjs +0 -2
  49. package/dist/esm2022/lib/components/chat/copilot-chat-view-disclaimer.mjs +0 -48
  50. package/dist/esm2022/lib/components/chat/copilot-chat-view-feather.mjs +0 -41
  51. package/dist/esm2022/lib/components/chat/copilot-chat-view-handlers.mjs +0 -19
  52. package/dist/esm2022/lib/components/chat/copilot-chat-view-input-container.mjs +0 -96
  53. package/dist/esm2022/lib/components/chat/copilot-chat-view-scroll-to-bottom-button.mjs +0 -89
  54. package/dist/esm2022/lib/components/chat/copilot-chat-view-scroll-view.mjs +0 -456
  55. package/dist/esm2022/lib/components/chat/copilot-chat-view.mjs +0 -404
  56. package/dist/esm2022/lib/components/chat/copilot-chat-view.types.mjs +0 -2
  57. package/dist/esm2022/lib/components/chat/copilot-chat.mjs +0 -165
  58. package/dist/esm2022/lib/config.mjs +0 -9
  59. package/dist/esm2022/lib/copilotkit.mjs +0 -125
  60. package/dist/esm2022/lib/directives/copilotkit-agent-context.mjs +0 -130
  61. package/dist/esm2022/lib/directives/stick-to-bottom.mjs +0 -170
  62. package/dist/esm2022/lib/directives/tooltip.mjs +0 -217
  63. package/dist/esm2022/lib/human-in-the-loop.mjs +0 -19
  64. package/dist/esm2022/lib/render-tool-calls.mjs +0 -167
  65. package/dist/esm2022/lib/resize-observer.mjs +0 -152
  66. package/dist/esm2022/lib/scroll-position.mjs +0 -123
  67. package/dist/esm2022/lib/slots/copilot-slot.mjs +0 -156
  68. package/dist/esm2022/lib/slots/index.mjs +0 -4
  69. package/dist/esm2022/lib/slots/slot.types.mjs +0 -6
  70. package/dist/esm2022/lib/slots/slot.utils.mjs +0 -235
  71. package/dist/esm2022/lib/tools.mjs +0 -31
  72. package/dist/esm2022/lib/utils.mjs +0 -10
  73. package/dist/esm2022/public-api.mjs +0 -48
@@ -1,165 +0,0 @@
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 { AGUIConnectNotImplementedError, } from "@ag-ui/client";
6
- import { injectAgentStore } from "../../agent";
7
- import { CopilotKit } from "../../copilotkit";
8
- import { ChatState } from "../../chat-state";
9
- import * as i0 from "@angular/core";
10
- /**
11
- * CopilotChat component - Angular equivalent of React's <CopilotChat>
12
- * Provides a complete chat interface that wires an agent to the chat view
13
- *
14
- * @example
15
- * ```html
16
- * <copilot-chat [agentId]="'default'" [threadId]="'abc123'"></copilot-chat>
17
- * ```
18
- */
19
- export class CopilotChat {
20
- inputValue = signal("");
21
- agentId = input();
22
- threadId = input();
23
- inputComponent = input();
24
- resolvedAgentId = computed(() => this.agentId() ?? DEFAULT_AGENT_ID);
25
- agentStore = injectAgentStore(this.resolvedAgentId);
26
- copilotKit = inject(CopilotKit);
27
- // readonly chatConfig = injectChatConfig();
28
- cdr = inject(ChangeDetectorRef);
29
- injector = inject(Injector);
30
- messages = computed(() => this.agentStore()?.messages());
31
- isRunning = computed(() => this.agentStore()?.isRunning());
32
- showCursor = signal(false);
33
- generatedThreadId = randomUUID();
34
- hasConnectedOnce = false;
35
- constructor() {
36
- // Connect once when agent becomes available
37
- // Connect once when agent becomes available
38
- effect(() => {
39
- const a = this.agentStore()?.agent;
40
- if (!a)
41
- return;
42
- // Apply thread id when agent is available
43
- a.threadId = this.threadId() || this.generatedThreadId;
44
- if (!this.hasConnectedOnce) {
45
- this.hasConnectedOnce = true;
46
- if ("isCopilotKitAgent" in a) {
47
- this.connectToAgent(a);
48
- }
49
- else {
50
- // Non-CopilotKit agent: nothing to connect; keep default cursor state
51
- }
52
- }
53
- }, { allowSignalWrites: true });
54
- // Keep agent threadId in sync with input
55
- effect(() => {
56
- const a = this.agentStore()?.agent;
57
- if (a) {
58
- a.threadId = this.threadId() || this.generatedThreadId;
59
- }
60
- });
61
- // Hide cursor when agent starts (runAgent via core does not pass subscriber callbacks)
62
- effect(() => {
63
- if (this.isRunning()) {
64
- this.showCursor.set(false);
65
- this.cdr.markForCheck();
66
- }
67
- }, { allowSignalWrites: true });
68
- }
69
- async connectToAgent(agent) {
70
- if (!agent)
71
- return;
72
- this.showCursor.set(true);
73
- this.cdr.markForCheck();
74
- try {
75
- await this.copilotKit.core.connectAgent({ agent });
76
- this.showCursor.set(false);
77
- this.cdr.markForCheck();
78
- }
79
- catch (error) {
80
- if (error instanceof AGUIConnectNotImplementedError) {
81
- // Connect not implemented (e.g. agent only supports run), ignore
82
- }
83
- else {
84
- console.error("Failed to connect to agent:", error);
85
- }
86
- this.showCursor.set(false);
87
- this.cdr.markForCheck();
88
- }
89
- }
90
- async submitInput(value) {
91
- const agent = this.agentStore()?.agent;
92
- if (!agent || !value.trim())
93
- return;
94
- // Add user message
95
- const userMessage = {
96
- id: randomUUID(),
97
- role: "user",
98
- content: value,
99
- };
100
- agent.addMessage(userMessage);
101
- // Clear the input
102
- this.inputValue.set("");
103
- // Show cursor while processing
104
- this.showCursor.set(true);
105
- this.cdr.markForCheck();
106
- // Run the agent via core so tools (and context, forwardedProps) are included
107
- try {
108
- await this.copilotKit.core.runAgent({ agent });
109
- }
110
- catch (error) {
111
- console.error("Agent run error:", error);
112
- }
113
- finally {
114
- this.showCursor.set(false);
115
- this.cdr.markForCheck();
116
- }
117
- }
118
- changeInput(value) {
119
- this.inputValue.set(value);
120
- }
121
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CopilotChat, deps: [], target: i0.ɵɵFactoryTarget.Component });
122
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", 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 } }, host: { attributes: { "data-copilotkit": "" } }, providers: [
123
- {
124
- provide: ChatState,
125
- useExisting: CopilotChat,
126
- },
127
- ], ngImport: i0, template: `
128
- <copilot-chat-view
129
- [messages]="messages() ?? []"
130
- [autoScroll]="true"
131
- [messageViewClass]="'w-full'"
132
- [showCursor]="showCursor()"
133
- [inputComponent]="inputComponent()"
134
- >
135
- </copilot-chat-view>
136
- `, 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 });
137
- }
138
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CopilotChat, decorators: [{
139
- type: Component,
140
- args: [{
141
- selector: "copilot-chat",
142
- standalone: true,
143
- imports: [CommonModule, CopilotChatView],
144
- changeDetection: ChangeDetectionStrategy.OnPush,
145
- encapsulation: ViewEncapsulation.None,
146
- host: { "data-copilotkit": "" },
147
- template: `
148
- <copilot-chat-view
149
- [messages]="messages() ?? []"
150
- [autoScroll]="true"
151
- [messageViewClass]="'w-full'"
152
- [showCursor]="showCursor()"
153
- [inputComponent]="inputComponent()"
154
- >
155
- </copilot-chat-view>
156
- `,
157
- providers: [
158
- {
159
- provide: ChatState,
160
- useExisting: CopilotChat,
161
- },
162
- ],
163
- }]
164
- }], ctorParameters: () => [] });
165
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2NoYXQvY29waWxvdC1jaGF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsTUFBTSxFQUNOLE1BQU0sRUFDTixpQkFBaUIsRUFDakIsUUFBUSxFQUVSLFFBQVEsRUFDUixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEUsT0FBTyxFQUdMLDhCQUE4QixHQUMvQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7QUFFN0M7Ozs7Ozs7O0dBUUc7QUF5QkgsTUFBTSxPQUFPLFdBQVc7SUFDYixVQUFVLEdBQUcsTUFBTSxDQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLE9BQU8sR0FBRyxLQUFLLEVBQXNCLENBQUM7SUFDdEMsUUFBUSxHQUFHLEtBQUssRUFBc0IsQ0FBQztJQUN2QyxjQUFjLEdBQUcsS0FBSyxFQUF5QixDQUFDO0lBQ3hDLGVBQWUsR0FBRyxRQUFRLENBQ3pDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxnQkFBZ0IsQ0FDekMsQ0FBQztJQUNPLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsZUFB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QUNULElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsS0FBYTtRQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QixDQUFDO3dHQW5IVSxXQUFXOzRGQUFYLFdBQVcsMGdCQVBYO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLFNBQVM7Z0JBQ2xCLFdBQVcsRUFBRSxXQUFXO2FBQ3pCO1NBQ0YsMEJBZlM7Ozs7Ozs7OztHQVNULDJEQWJTLFlBQVksK0JBQUUsZUFBZTs7NEZBcUI1QixXQUFXO2tCQXhCdkIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsY0FBYztvQkFDeEIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxlQUFlLENBQUM7b0JBQ3hDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtvQkFDckMsSUFBSSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxFQUFFO29CQUMvQixRQUFRLEVBQUU7Ozs7Ozs7OztHQVNUO29CQUNELFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsU0FBUzs0QkFDbEIsV0FBVyxhQUFhO3lCQUN6QjtxQkFDRjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgaW5wdXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgc2lnbmFsLFxuICBlZmZlY3QsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBJbmplY3RvcixcbiAgVHlwZSxcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IENvcGlsb3RDaGF0VmlldyB9IGZyb20gXCIuL2NvcGlsb3QtY2hhdC12aWV3XCI7XG5cbmltcG9ydCB7IERFRkFVTFRfQUdFTlRfSUQsIHJhbmRvbVVVSUQgfSBmcm9tIFwiQGNvcGlsb3RraXRuZXh0L3NoYXJlZFwiO1xuaW1wb3J0IHtcbiAgTWVzc2FnZSxcbiAgQWJzdHJhY3RBZ2VudCxcbiAgQUdVSUNvbm5lY3ROb3RJbXBsZW1lbnRlZEVycm9yLFxufSBmcm9tIFwiQGFnLXVpL2NsaWVudFwiO1xuaW1wb3J0IHsgaW5qZWN0QWdlbnRTdG9yZSB9IGZyb20gXCIuLi8uLi9hZ2VudFwiO1xuaW1wb3J0IHsgQ29waWxvdEtpdCB9IGZyb20gXCIuLi8uLi9jb3BpbG90a2l0XCI7XG5pbXBvcnQgeyBDaGF0U3RhdGUgfSBmcm9tIFwiLi4vLi4vY2hhdC1zdGF0ZVwiO1xuXG4vKipcbiAqIENvcGlsb3RDaGF0IGNvbXBvbmVudCAtIEFuZ3VsYXIgZXF1aXZhbGVudCBvZiBSZWFjdCdzIDxDb3BpbG90Q2hhdD5cbiAqIFByb3ZpZGVzIGEgY29tcGxldGUgY2hhdCBpbnRlcmZhY2UgdGhhdCB3aXJlcyBhbiBhZ2VudCB0byB0aGUgY2hhdCB2aWV3XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxjb3BpbG90LWNoYXQgW2FnZW50SWRdPVwiJ2RlZmF1bHQnXCIgW3RocmVhZElkXT1cIidhYmMxMjMnXCI+PC9jb3BpbG90LWNoYXQ+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImNvcGlsb3QtY2hhdFwiLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBDb3BpbG90Q2hhdFZpZXddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaG9zdDogeyBcImRhdGEtY29waWxvdGtpdFwiOiBcIlwiIH0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGNvcGlsb3QtY2hhdC12aWV3XG4gICAgICBbbWVzc2FnZXNdPVwibWVzc2FnZXMoKSA/PyBbXVwiXG4gICAgICBbYXV0b1Njcm9sbF09XCJ0cnVlXCJcbiAgICAgIFttZXNzYWdlVmlld0NsYXNzXT1cIid3LWZ1bGwnXCJcbiAgICAgIFtzaG93Q3Vyc29yXT1cInNob3dDdXJzb3IoKVwiXG4gICAgICBbaW5wdXRDb21wb25lbnRdPVwiaW5wdXRDb21wb25lbnQoKVwiXG4gICAgPlxuICAgIDwvY29waWxvdC1jaGF0LXZpZXc+XG4gIGAsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IENoYXRTdGF0ZSxcbiAgICAgIHVzZUV4aXN0aW5nOiBDb3BpbG90Q2hhdCxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDb3BpbG90Q2hhdCBpbXBsZW1lbnRzIENoYXRTdGF0ZSB7XG4gIHJlYWRvbmx5IGlucHV0VmFsdWUgPSBzaWduYWw8c3RyaW5nPihcIlwiKTtcbiAgcmVhZG9ubHkgYWdlbnRJZCA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgdGhyZWFkSWQgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IGlucHV0Q29tcG9uZW50ID0gaW5wdXQ8VHlwZTxhbnk+IHwgdW5kZWZpbmVkPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlc29sdmVkQWdlbnRJZCA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuYWdlbnRJZCgpID8/IERFRkFVTFRfQUdFTlRfSUQsXG4gICk7XG4gIHJlYWRvbmx5IGFnZW50U3RvcmUgPSBpbmplY3RBZ2VudFN0b3JlKHRoaXMucmVzb2x2ZWRBZ2VudElkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjb3BpbG90S2l0ID0gaW5qZWN0KENvcGlsb3RLaXQpO1xuICAvLyByZWFkb25seSBjaGF0Q29uZmlnID0gaW5qZWN0Q2hhdENvbmZpZygpO1xuICByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICByZWFkb25seSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG5cbiAgcHJvdGVjdGVkIG1lc3NhZ2VzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5hZ2VudFN0b3JlKCk/Lm1lc3NhZ2VzKCkpO1xuICBwcm90ZWN0ZWQgaXNSdW5uaW5nID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5hZ2VudFN0b3JlKCk/LmlzUnVubmluZygpKTtcbiAgcHJvdGVjdGVkIHNob3dDdXJzb3IgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHByaXZhdGUgZ2VuZXJhdGVkVGhyZWFkSWQ6IHN0cmluZyA9IHJhbmRvbVVVSUQoKTtcbiAgcHJpdmF0ZSBoYXNDb25uZWN0ZWRPbmNlID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gQ29ubmVjdCBvbmNlIHdoZW4gYWdlbnQgYmVjb21lcyBhdmFpbGFibGVcbiAgICAvLyBDb25uZWN0IG9uY2Ugd2hlbiBhZ2VudCBiZWNvbWVzIGF2YWlsYWJsZVxuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgY29uc3QgYSA9IHRoaXMuYWdlbnRTdG9yZSgpPy5hZ2VudDtcbiAgICAgICAgaWYgKCFhKSByZXR1cm47XG4gICAgICAgIC8vIEFwcGx5IHRocmVhZCBpZCB3aGVuIGFnZW50IGlzIGF2YWlsYWJsZVxuICAgICAgICBhLnRocmVhZElkID0gdGhpcy50aHJlYWRJZCgpIHx8IHRoaXMuZ2VuZXJhdGVkVGhyZWFkSWQ7XG4gICAgICAgIGlmICghdGhpcy5oYXNDb25uZWN0ZWRPbmNlKSB7XG4gICAgICAgICAgdGhpcy5oYXNDb25uZWN0ZWRPbmNlID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoXCJpc0NvcGlsb3RLaXRBZ2VudFwiIGluIChhIGFzIGFueSkpIHtcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdFRvQWdlbnQoYSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5vbi1Db3BpbG90S2l0IGFnZW50OiBub3RoaW5nIHRvIGNvbm5lY3Q7IGtlZXAgZGVmYXVsdCBjdXJzb3Igc3RhdGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG4gICAgKTtcblxuICAgIC8vIEtlZXAgYWdlbnQgdGhyZWFkSWQgaW4gc3luYyB3aXRoIGlucHV0XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGEgPSB0aGlzLmFnZW50U3RvcmUoKT8uYWdlbnQ7XG4gICAgICBpZiAoYSkge1xuICAgICAgICBhLnRocmVhZElkID0gdGhpcy50aHJlYWRJZCgpIHx8IHRoaXMuZ2VuZXJhdGVkVGhyZWFkSWQ7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBIaWRlIGN1cnNvciB3aGVuIGFnZW50IHN0YXJ0cyAocnVuQWdlbnQgdmlhIGNvcmUgZG9lcyBub3QgcGFzcyBzdWJzY3JpYmVyIGNhbGxiYWNrcylcbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmlzUnVubmluZygpKSB7XG4gICAgICAgICAgdGhpcy5zaG93Q3Vyc29yLnNldChmYWxzZSk7XG4gICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29ubmVjdFRvQWdlbnQoYWdlbnQ6IEFic3RyYWN0QWdlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIWFnZW50KSByZXR1cm47XG5cbiAgICB0aGlzLnNob3dDdXJzb3Iuc2V0KHRydWUpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuY29waWxvdEtpdC5jb3JlLmNvbm5lY3RBZ2VudCh7IGFnZW50IH0pO1xuICAgICAgdGhpcy5zaG93Q3Vyc29yLnNldChmYWxzZSk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQUdVSUNvbm5lY3ROb3RJbXBsZW1lbnRlZEVycm9yKSB7XG4gICAgICAgIC8vIENvbm5lY3Qgbm90IGltcGxlbWVudGVkIChlLmcuIGFnZW50IG9ubHkgc3VwcG9ydHMgcnVuKSwgaWdub3JlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGNvbm5lY3QgdG8gYWdlbnQ6XCIsIGVycm9yKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2hvd0N1cnNvci5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3VibWl0SW5wdXQodmFsdWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGFnZW50ID0gdGhpcy5hZ2VudFN0b3JlKCk/LmFnZW50O1xuICAgIGlmICghYWdlbnQgfHwgIXZhbHVlLnRyaW0oKSkgcmV0dXJuO1xuXG4gICAgLy8gQWRkIHVzZXIgbWVzc2FnZVxuICAgIGNvbnN0IHVzZXJNZXNzYWdlOiBNZXNzYWdlID0ge1xuICAgICAgaWQ6IHJhbmRvbVVVSUQoKSxcbiAgICAgIHJvbGU6IFwidXNlclwiLFxuICAgICAgY29udGVudDogdmFsdWUsXG4gICAgfTtcbiAgICBhZ2VudC5hZGRNZXNzYWdlKHVzZXJNZXNzYWdlKTtcblxuICAgIC8vIENsZWFyIHRoZSBpbnB1dFxuICAgIHRoaXMuaW5wdXRWYWx1ZS5zZXQoXCJcIik7XG5cbiAgICAvLyBTaG93IGN1cnNvciB3aGlsZSBwcm9jZXNzaW5nXG4gICAgdGhpcy5zaG93Q3Vyc29yLnNldCh0cnVlKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblxuICAgIC8vIFJ1biB0aGUgYWdlbnQgdmlhIGNvcmUgc28gdG9vbHMgKGFuZCBjb250ZXh0LCBmb3J3YXJkZWRQcm9wcykgYXJlIGluY2x1ZGVkXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuY29waWxvdEtpdC5jb3JlLnJ1bkFnZW50KHsgYWdlbnQgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJBZ2VudCBydW4gZXJyb3I6XCIsIGVycm9yKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5zaG93Q3Vyc29yLnNldChmYWxzZSk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VJbnB1dCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5pbnB1dFZhbHVlLnNldCh2YWx1ZSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,9 +0,0 @@
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+KFxuICBcIkNPUElMT1RfS0lUX0NPTkZJR1wiLFxuKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdENvcGlsb3RLaXRDb25maWcoKTogQ29waWxvdEtpdENvbmZpZyB7XG4gIHJldHVybiBpbmplY3QoQ09QSUxPVF9LSVRfQ09ORklHKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVDb3BpbG90S2l0KGNvbmZpZzogQ29waWxvdEtpdENvbmZpZyk6IFByb3ZpZGVyIHtcbiAgcmV0dXJuIHsgcHJvdmlkZTogQ09QSUxPVF9LSVRfQ09ORklHLCB1c2VWYWx1ZTogY29uZmlnIH07XG59XG4iXX0=
@@ -1,125 +0,0 @@
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__unsafe_dev_only: 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, context) => runInInjectionContext(injector, () => handler(args, context)),
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, agentId);
93
- const keep = (config) => config.name !== toolName ||
94
- (agentId === undefined
95
- ? !!config.agentId
96
- : !this.#isSameAgentId(config, agentId));
97
- this.#clientToolCallRenderConfigs.update((current) => current.filter(keep));
98
- this.#humanInTheLoopToolRenderConfigs.update((current) => current.filter(keep));
99
- this.#toolCallRenderConfigs.update((current) => current.filter(keep));
100
- }
101
- getAgent(agentId) {
102
- return this.core.getAgent(agentId);
103
- }
104
- updateRuntime(options) {
105
- if (options.runtimeUrl !== undefined) {
106
- this.core.setRuntimeUrl(options.runtimeUrl);
107
- }
108
- if (options.headers !== undefined) {
109
- this.core.setHeaders(options.headers);
110
- }
111
- if (options.properties !== undefined) {
112
- this.core.setProperties(options.properties);
113
- }
114
- if (options.agents !== undefined) {
115
- this.core.setAgents__unsafe_dev_only(options.agents);
116
- }
117
- }
118
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CopilotKit, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
119
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CopilotKit, providedIn: "root" });
120
- }
121
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CopilotKit, decorators: [{
122
- type: Injectable,
123
- args: [{ providedIn: "root" }]
124
- }], ctorParameters: () => [] });
125
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdGtpdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY29waWxvdGtpdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQWdCLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BFLE9BQU8sRUFDTCxVQUFVLEVBQ1YsUUFBUSxFQUdSLHFCQUFxQixFQUNyQixNQUFNLEVBQ04sTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBTXZCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7O0FBR3JELE1BQU0sT0FBTyxVQUFVO0lBQ1osT0FBTyxHQUFHLHNCQUFzQixFQUFFLENBQUM7SUFDbkMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMvQixhQUFhLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pDLE9BQU8sR0FBRyxNQUFNLENBQ3ZCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FDMUIsQ0FBQztJQUNPLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBRW5DLElBQUksR0FBRyxJQUFJLGNBQWMsQ0FBQztRQUNqQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVO1FBQ25DLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU87UUFDN0IsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVTtRQUNuQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07UUFDNUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSztLQUMxQixDQUFDLENBQUM7SUFFTSxzQkFBc0IsR0FDN0IsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ0osNEJBQTRC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MEIsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkQsQ0FBQztJQUNILENBQUM7d0dBcktVLFVBQVU7NEdBQVYsVUFBVSxjQURHLE1BQU07OzRGQUNuQixVQUFVO2tCQUR0QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0QWdlbnQgfSBmcm9tIFwiQGFnLXVpL2NsaWVudFwiO1xuaW1wb3J0IHsgRnJvbnRlbmRUb29sLCBDb3BpbG90S2l0Q29yZSB9IGZyb20gXCJAY29waWxvdGtpdG5leHQvY29yZVwiO1xuaW1wb3J0IHtcbiAgSW5qZWN0YWJsZSxcbiAgSW5qZWN0b3IsXG4gIFNpZ25hbCxcbiAgV3JpdGFibGVTaWduYWwsXG4gIHJ1bkluSW5qZWN0aW9uQ29udGV4dCxcbiAgc2lnbmFsLFxuICBpbmplY3QsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICBGcm9udGVuZFRvb2xDb25maWcsXG4gIEh1bWFuSW5UaGVMb29wQ29uZmlnLFxuICBSZW5kZXJUb29sQ2FsbENvbmZpZyxcbn0gZnJvbSBcIi4vdG9vbHNcIjtcbmltcG9ydCB7IGluamVjdENvcGlsb3RLaXRDb25maWcgfSBmcm9tIFwiLi9jb25maWdcIjtcbmltcG9ydCB7IEh1bWFuSW5UaGVMb29wIH0gZnJvbSBcIi4vaHVtYW4taW4tdGhlLWxvb3BcIjtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiBcInJvb3RcIiB9KVxuZXhwb3J0IGNsYXNzIENvcGlsb3RLaXQge1xuICByZWFkb25seSAjY29uZmlnID0gaW5qZWN0Q29waWxvdEtpdENvbmZpZygpO1xuICByZWFkb25seSAjaGl0bCA9IGluamVjdChIdW1hbkluVGhlTG9vcCk7XG4gIHJlYWRvbmx5ICNyb290SW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICByZWFkb25seSAjYWdlbnRzID0gc2lnbmFsPFJlY29yZDxzdHJpbmcsIEFic3RyYWN0QWdlbnQ+PihcbiAgICB0aGlzLiNjb25maWcuYWdlbnRzID8/IHt9LFxuICApO1xuICByZWFkb25seSBhZ2VudHMgPSB0aGlzLiNhZ2VudHMuYXNSZWFkb25seSgpO1xuXG4gIHJlYWRvbmx5IGNvcmUgPSBuZXcgQ29waWxvdEtpdENvcmUoe1xuICAgIHJ1bnRpbWVVcmw6IHRoaXMuI2NvbmZpZy5ydW50aW1lVXJsLFxuICAgIGhlYWRlcnM6IHRoaXMuI2NvbmZpZy5oZWFkZXJzLFxuICAgIHByb3BlcnRpZXM6IHRoaXMuI2NvbmZpZy5wcm9wZXJ0aWVzLFxuICAgIGFnZW50c19fdW5zYWZlX2Rldl9vbmx5OiB0aGlzLiNjb25maWcuYWdlbnRzLFxuICAgIHRvb2xzOiB0aGlzLiNjb25maWcudG9vbHMsXG4gIH0pO1xuXG4gIHJlYWRvbmx5ICN0b29sQ2FsbFJlbmRlckNvbmZpZ3M6IFdyaXRhYmxlU2lnbmFsPFJlbmRlclRvb2xDYWxsQ29uZmlnW10+ID1cbiAgICBzaWduYWwoW10pO1xuICByZWFkb25seSAjY2xpZW50VG9vbENhbGxSZW5kZXJDb25maWdzOiBXcml0YWJsZVNpZ25hbDxGcm9udGVuZFRvb2xDb25maWdbXT4gPVxuICAgIHNpZ25hbChbXSk7XG4gIHJlYWRvbmx5ICNodW1hbkluVGhlTG9vcFRvb2xSZW5kZXJDb25maWdzOiBXcml0YWJsZVNpZ25hbDxcbiAgICBIdW1hbkluVGhlTG9vcENvbmZpZ1tdXG4gID4gPSBzaWduYWwoW10pO1xuXG4gIHJlYWRvbmx5IHRvb2xDYWxsUmVuZGVyQ29uZmlnczogU2lnbmFsPFJlbmRlclRvb2xDYWxsQ29uZmlnW10+ID1cbiAgICB0aGlzLiN0b29sQ2FsbFJlbmRlckNvbmZpZ3MuYXNSZWFkb25seSgpO1xuICByZWFkb25seSBjbGllbnRUb29sQ2FsbFJlbmRlckNvbmZpZ3M6IFNpZ25hbDxGcm9udGVuZFRvb2xDb25maWdbXT4gPVxuICAgIHRoaXMuI2NsaWVudFRvb2xDYWxsUmVuZGVyQ29uZmlncy5hc1JlYWRvbmx5KCk7XG4gIHJlYWRvbmx5IGh1bWFuSW5UaGVMb29wVG9vbFJlbmRlckNvbmZpZ3M6IFNpZ25hbDxIdW1hbkluVGhlTG9vcENvbmZpZ1tdPiA9XG4gICAgdGhpcy4jaHVtYW5JblRoZUxvb3BUb29sUmVuZGVyQ29uZmlncy5hc1JlYWRvbmx5KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy4jY29uZmlnLnJlbmRlclRvb2xDYWxscz8uZm9yRWFjaCgocmVuZGVyQ29uZmlnKSA9PiB7XG4gICAgICB0aGlzLmFkZFJlbmRlclRvb2xDYWxsKHJlbmRlckNvbmZpZyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLiNjb25maWcudG9vbHM/LmZvckVhY2goKHRvb2wpID0+IHtcbiAgICAgIGlmICh0b29sLnJlbmRlcmVyICYmIHRvb2wucGFyYW1ldGVycykge1xuICAgICAgICB0aGlzLmFkZFJlbmRlclRvb2xDYWxsKHtcbiAgICAgICAgICBuYW1lOiB0b29sLm5hbWUsXG4gICAgICAgICAgYXJnczogdG9vbC5wYXJhbWV0ZXJzLFxuICAgICAgICAgIGNvbXBvbmVudDogdG9vbC5yZW5kZXJlcixcbiAgICAgICAgICBhZ2VudElkOiB0b29sLmFnZW50SWQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy4jY29uZmlnLmZyb250ZW5kVG9vbHM/LmZvckVhY2goKGNsaWVudFRvb2wpID0+IHtcbiAgICAgIHRoaXMuYWRkRnJvbnRlbmRUb29sKHsgLi4uY2xpZW50VG9vbCwgaW5qZWN0b3I6IHRoaXMuI3Jvb3RJbmplY3RvciB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuI2NvbmZpZy5odW1hbkluVGhlTG9vcD8uZm9yRWFjaCgoaHVtYW5JblRoZUxvb3BUb29sKSA9PiB7XG4gICAgICB0aGlzLmFkZEh1bWFuSW5UaGVMb29wKGh1bWFuSW5UaGVMb29wVG9vbCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmNvcmUuc3Vic2NyaWJlKHtcbiAgICAgIG9uQWdlbnRzQ2hhbmdlZDogKCkgPT4ge1xuICAgICAgICB0aGlzLiNhZ2VudHMuc2V0KHRoaXMuY29yZS5hZ2VudHMpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gICNiaW5kQ2xpZW50VG9vbChcbiAgICBjbGllbnRUb29sV2l0aEluamVjdG9yOiBGcm9udGVuZFRvb2xDb25maWcgJiB7XG4gICAgICBpbmplY3RvcjogSW5qZWN0b3I7XG4gICAgfSxcbiAgKTogRnJvbnRlbmRUb29sIHtcbiAgICBjb25zdCB7IGluamVjdG9yLCBoYW5kbGVyLCAuLi5mcm9udGVuZENhbmRpZGF0ZSB9ID0gY2xpZW50VG9vbFdpdGhJbmplY3RvcjtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5mcm9udGVuZENhbmRpZGF0ZSxcbiAgICAgIGhhbmRsZXI6IChhcmdzLCBjb250ZXh0KSA9PlxuICAgICAgICBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IGhhbmRsZXIoYXJncywgY29udGV4dCkpLFxuICAgIH07XG4gIH1cblxuICBhZGRGcm9udGVuZFRvb2woXG4gICAgY2xpZW50VG9vbFdpdGhJbmplY3RvcjogRnJvbnRlbmRUb29sQ29uZmlnICYge1xuICAgICAgaW5qZWN0b3I6IEluamVjdG9yO1xuICAgIH0sXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHRvb2wgPSB0aGlzLiNiaW5kQ2xpZW50VG9vbChjbGllbnRUb29sV2l0aEluamVjdG9yKTtcblxuICAgIHRoaXMuY29yZS5hZGRUb29sKHRvb2wpO1xuXG4gICAgdGhpcy4jY2xpZW50VG9vbENhbGxSZW5kZXJDb25maWdzLnVwZGF0ZSgoY3VycmVudCkgPT4gW1xuICAgICAgLi4uY3VycmVudCxcbiAgICAgIGNsaWVudFRvb2xXaXRoSW5qZWN0b3IsXG4gICAgXSk7XG4gIH1cblxuICBhZGRSZW5kZXJUb29sQ2FsbChyZW5kZXJDb25maWc6IFJlbmRlclRvb2xDYWxsQ29uZmlnKTogdm9pZCB7XG4gICAgdGhpcy4jdG9vbENhbGxSZW5kZXJDb25maWdzLnVwZGF0ZSgoY3VycmVudCkgPT4gWy4uLmN1cnJlbnQsIHJlbmRlckNvbmZpZ10pO1xuICB9XG5cbiAgI2JpbmRIdW1hbkluVGhlTG9vcFRvb2woXG4gICAgaHVtYW5JblRoZUxvb3BUb29sOiBIdW1hbkluVGhlTG9vcENvbmZpZyxcbiAgKTogRnJvbnRlbmRUb29sIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uaHVtYW5JblRoZUxvb3BUb29sLFxuICAgICAgaGFuZGxlcjogKGFyZ3MsIHsgdG9vbENhbGwgfSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy4jaGl0bC5vblJlc3VsdCh0b29sQ2FsbC5pZCwgaHVtYW5JblRoZUxvb3BUb29sLm5hbWUpO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgYWRkSHVtYW5JblRoZUxvb3AoaHVtYW5JblRoZUxvb3BUb29sOiBIdW1hbkluVGhlTG9vcENvbmZpZyk6IHZvaWQge1xuICAgIHRoaXMuI2h1bWFuSW5UaGVMb29wVG9vbFJlbmRlckNvbmZpZ3MudXBkYXRlKChjdXJyZW50KSA9PiBbXG4gICAgICAuLi5jdXJyZW50LFxuICAgICAgaHVtYW5JblRoZUxvb3BUb29sLFxuICAgIF0pO1xuXG4gICAgY29uc3QgdG9vbCA9IHRoaXMuI2JpbmRIdW1hbkluVGhlTG9vcFRvb2woaHVtYW5JblRoZUxvb3BUb29sKTtcblxuICAgIHRoaXMuY29yZS5hZGRUb29sKHRvb2wpO1xuICB9XG5cbiAgI2lzU2FtZUFnZW50SWQ8VCBleHRlbmRzIHsgYWdlbnRJZD86IHN0cmluZyB9PihcbiAgICB0YXJnZXQ6IFQsXG4gICAgYWdlbnRJZD86IHN0cmluZyxcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKGFnZW50SWQpIHtcbiAgICAgIHJldHVybiB0YXJnZXQuYWdlbnRJZCA9PT0gYWdlbnRJZDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJlbW92ZVRvb2wodG9vbE5hbWU6IHN0cmluZywgYWdlbnRJZD86IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY29yZS5yZW1vdmVUb29sKHRvb2xOYW1lLCBhZ2VudElkKTtcbiAgICBjb25zdCBrZWVwID0gKGNvbmZpZzogeyBuYW1lOiBzdHJpbmc7IGFnZW50SWQ/OiBzdHJpbmcgfSkgPT5cbiAgICAgIGNvbmZpZy5uYW1lICE9PSB0b29sTmFtZSB8fFxuICAgICAgKGFnZW50SWQgPT09IHVuZGVmaW5lZFxuICAgICAgICA/ICEhY29uZmlnLmFnZW50SWRcbiAgICAgICAgOiAhdGhpcy4jaXNTYW1lQWdlbnRJZChjb25maWcsIGFnZW50SWQpKTtcbiAgICB0aGlzLiNjbGllbnRUb29sQ2FsbFJlbmRlckNvbmZpZ3MudXBkYXRlKChjdXJyZW50KSA9PiBjdXJyZW50LmZpbHRlcihrZWVwKSk7XG4gICAgdGhpcy4jaHVtYW5JblRoZUxvb3BUb29sUmVuZGVyQ29uZmlncy51cGRhdGUoKGN1cnJlbnQpID0+XG4gICAgICBjdXJyZW50LmZpbHRlcihrZWVwKSxcbiAgICApO1xuICAgIHRoaXMuI3Rvb2xDYWxsUmVuZGVyQ29uZmlncy51cGRhdGUoKGN1cnJlbnQpID0+IGN1cnJlbnQuZmlsdGVyKGtlZXApKTtcbiAgfVxuXG4gIGdldEFnZW50KGFnZW50SWQ6IHN0cmluZyk6IEFic3RyYWN0QWdlbnQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmNvcmUuZ2V0QWdlbnQoYWdlbnRJZCk7XG4gIH1cblxuICB1cGRhdGVSdW50aW1lKG9wdGlvbnM6IHtcbiAgICBydW50aW1lVXJsPzogc3RyaW5nO1xuICAgIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHByb3BlcnRpZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBhZ2VudHM/OiBSZWNvcmQ8c3RyaW5nLCBBYnN0cmFjdEFnZW50PjtcbiAgfSk6IHZvaWQge1xuICAgIGlmIChvcHRpb25zLnJ1bnRpbWVVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jb3JlLnNldFJ1bnRpbWVVcmwob3B0aW9ucy5ydW50aW1lVXJsKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuaGVhZGVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNvcmUuc2V0SGVhZGVycyhvcHRpb25zLmhlYWRlcnMpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5wcm9wZXJ0aWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY29yZS5zZXRQcm9wZXJ0aWVzKG9wdGlvbnMucHJvcGVydGllcyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmFnZW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNvcmUuc2V0QWdlbnRzX191bnNhZmVfZGV2X29ubHkob3B0aW9ucy5hZ2VudHMpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -1,130 +0,0 @@
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.14", ngImport: i0, type: CopilotKitAgentContext, deps: [{ token: CopilotKit }], target: i0.ɵɵFactoryTarget.Directive });
111
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", 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.14", 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=