@copilotkitnext/angular 0.0.7 → 0.0.9-alpha.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.
- package/README.md +172 -0
- package/dist/README.md +172 -0
- package/dist/components/chat/copilot-chat.component.d.ts +3 -2
- package/dist/esm2022/components/chat/copilot-chat-input.component.mjs +2 -2
- package/dist/esm2022/components/chat/copilot-chat.component.mjs +9 -3
- package/dist/esm2022/core/copilotkit.service.mjs +18 -21
- package/dist/esm2022/directives/copilotkit-agent.directive.mjs +8 -4
- package/dist/esm2022/directives/copilotkit-config.directive.mjs +1 -1
- package/dist/esm2022/utils/agent.utils.mjs +10 -10
- package/dist/fesm2022/copilotkitnext-angular.mjs +40 -36
- package/dist/fesm2022/copilotkitnext-angular.mjs.map +1 -1
- package/package.json +5 -5
|
@@ -2,6 +2,7 @@ import { DestroyRef, inject, signal, computed, runInInjectionContext, } from "@a
|
|
|
2
2
|
import { toObservable } from "@angular/core/rxjs-interop";
|
|
3
3
|
import { CopilotKitService } from "../core/copilotkit.service";
|
|
4
4
|
import { DEFAULT_AGENT_ID } from "@copilotkitnext/shared";
|
|
5
|
+
import { CopilotKitCoreRuntimeConnectionStatus } from "@copilotkitnext/core";
|
|
5
6
|
/**
|
|
6
7
|
* Watches an agent and provides reactive signals for its state.
|
|
7
8
|
* Must be called within an injection context.
|
|
@@ -84,15 +85,14 @@ export function watchAgent(config) {
|
|
|
84
85
|
subscribeToAgent();
|
|
85
86
|
// Subscribe to CopilotKit changes to detect agent updates
|
|
86
87
|
const coreUnsubscribe = service.copilotkit.subscribe({
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
subscribeToAgent();
|
|
88
|
+
onRuntimeConnectionStatusChanged({ status }) {
|
|
89
|
+
if (status === CopilotKitCoreRuntimeConnectionStatus.Connected ||
|
|
90
|
+
status === CopilotKitCoreRuntimeConnectionStatus.Disconnected ||
|
|
91
|
+
status === CopilotKitCoreRuntimeConnectionStatus.Error) {
|
|
92
|
+
// Re-check agent when runtime connection state changes
|
|
93
|
+
currentAgent = updateAgent();
|
|
94
|
+
subscribeToAgent();
|
|
95
|
+
}
|
|
96
96
|
},
|
|
97
97
|
});
|
|
98
98
|
// Register cleanup
|
|
@@ -209,4 +209,4 @@ export function subscribeToAgent(service, agentId, callbacks) {
|
|
|
209
209
|
});
|
|
210
210
|
return () => subscription.unsubscribe();
|
|
211
211
|
}
|
|
212
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvYWdlbnQudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFVBQVUsRUFDVixNQUFNLEVBQ04sTUFBTSxFQUNOLFFBQVEsRUFFUixxQkFBcUIsR0FDdEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBTS9ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTFEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQUMsTUFBNkI7SUFDdEQsbURBQW1EO0lBQ25ELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0QyxNQUFNLGdCQUFnQixHQUFHLE1BQU0sRUFBRSxPQUFPLElBQUksZ0JBQWdCLENBQUM7SUFFN0QsbUVBQW1FO0lBQ25FLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBNEIsU0FBUyxDQUFDLENBQUM7SUFDakUsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFTLENBQUMsQ0FBQyxDQUFDO0lBQy9CLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUUvQyw4REFBOEQ7SUFDOUQsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUM3QixzQ0FBc0M7UUFDdEMsSUFBSSxFQUFFLENBQUM7UUFDUCxNQUFNLENBQUMsR0FBRyxXQUFXLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsQ0FBQztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ2xCLG9EQUFvRDtRQUNw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QUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEZXN0cm95UmVmLFxuICBpbmplY3QsXG4gIHNpZ25hbCxcbiAgY29tcHV0ZWQsXG4gIEluamVjdG9yLFxuICBydW5JbkluamVjdGlvbkNvbnRleHQsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyB0b09ic2VydmFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3BcIjtcbmltcG9ydCB7IENvcGlsb3RLaXRTZXJ2aWNlIH0gZnJvbSBcIi4uL2NvcmUvY29waWxvdGtpdC5zZXJ2aWNlXCI7XG5pbXBvcnQge1xuICBBZ2VudFN1YnNjcmlwdGlvbkNhbGxiYWNrcyxcbiAgQWdlbnRXYXRjaFJlc3VsdCxcbn0gZnJvbSBcIi4uL2NvcmUvY29waWxvdGtpdC50eXBlc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RBZ2VudCB9IGZyb20gXCJAYWctdWkvY2xpZW50XCI7XG5pbXBvcnQgeyBERUZBVUxUX0FHRU5UX0lEIH0gZnJvbSBcIkBjb3BpbG90a2l0bmV4dC9zaGFyZWRcIjtcblxuLyoqXG4gKiBXYXRjaGVzIGFuIGFnZW50IGFuZCBwcm92aWRlcyByZWFjdGl2ZSBzaWduYWxzIGZvciBpdHMgc3RhdGUuXG4gKiBNdXN0IGJlIGNhbGxlZCB3aXRoaW4gYW4gaW5qZWN0aW9uIGNvbnRleHQuXG4gKiBBdXRvbWF0aWNhbGx5IGNsZWFucyB1cCB3aGVuIHRoZSBjb21wb25lbnQvc2VydmljZSBpcyBkZXN0cm95ZWQuXG4gKlxuICogQHBhcmFtIGNvbmZpZyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gd2l0aCBhZ2VudElkXG4gKiBAcmV0dXJucyBPYmplY3Qgd2l0aCBhZ2VudCwgbWVzc2FnZXMsIGFuZCBpc1J1bm5pbmcgc2lnbmFscyBwbHVzIG9ic2VydmFibGVzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGV4cG9ydCBjbGFzcyBNeUNvbXBvbmVudCB7XG4gKiAgIC8vIEF1dG9tYXRpY2FsbHkgdHJhY2tzIGFnZW50IHN0YXRlXG4gKiAgIGFnZW50U3RhdGUgPSB3YXRjaEFnZW50KHsgYWdlbnRJZDogJ215LWFnZW50JyB9KTtcbiAqXG4gKiAgIGNvbnN0cnVjdG9yKCkge1xuICogICAgIGVmZmVjdCgoKSA9PiB7XG4gKiAgICAgICBjb25zdCBtZXNzYWdlcyA9IHRoaXMuYWdlbnRTdGF0ZS5tZXNzYWdlcygpO1xuICogICAgICAgY29uc3QgaXNSdW5uaW5nID0gdGhpcy5hZ2VudFN0YXRlLmlzUnVubmluZygpO1xuICogICAgICAgY29uc29sZS5sb2coJ01lc3NhZ2VzOicsIG1lc3NhZ2VzLmxlbmd0aCwgJ1J1bm5pbmc6JywgaXNSdW5uaW5nKTtcbiAqICAgICB9KTtcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YXRjaEFnZW50KGNvbmZpZz86IHsgYWdlbnRJZD86IHN0cmluZyB9KTogQWdlbnRXYXRjaFJlc3VsdCB7XG4gIC8vIFVzZSBpbmplY3QoKSBpbnRlcm5hbGx5IHRvIGdldCByZXF1aXJlZCBzZXJ2aWNlc1xuICBjb25zdCBzZXJ2aWNlID0gaW5qZWN0KENvcGlsb3RLaXRTZXJ2aWNlKTtcbiAgY29uc3QgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgY29uc3QgZWZmZWN0aXZlQWdlbnRJZCA9IGNvbmZpZz8uYWdlbnRJZCA/PyBERUZBVUxUX0FHRU5UX0lEO1xuXG4gIC8vIENyZWF0ZSByZWFjdGl2ZSBzaWduYWxzIHdpdGggdGljayBtZWNoYW5pc20gZm9yIHJlbGlhYmxlIHVwZGF0ZXNcbiAgY29uc3QgYWdlbnRTaWduYWwgPSBzaWduYWw8QWJzdHJhY3RBZ2VudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgY29uc3QgdGljayA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBjb25zdCBpc1J1bm5pbmdTaWduYWwgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8vIENyZWF0ZSBjb21wdXRlZCBtZXNzYWdlcyBzaWduYWwgdGhhdCByZWFjdHMgdG8gdGljayBjaGFuZ2VzXG4gIGNvbnN0IG1lc3NhZ2VzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIC8vIEFjY2VzcyB0aWNrIHRvIGVuc3VyZSByZWNvbXB1dGF0aW9uXG4gICAgdGljaygpO1xuICAgIGNvbnN0IGEgPSBhZ2VudFNpZ25hbCgpO1xuICAgIGlmICghYSkgcmV0dXJuIFtdO1xuICAgIC8vIFJldHVybiBhIHNoYWxsb3cgY2xvbmUgdG8gZW5zdXJlIGNoYW5nZSBkZXRlY3Rpb25cbiAgICByZXR1cm4gYS5tZXNzYWdlcy5tYXAoKG0pID0+ICh7IC4uLm0gfSkpO1xuICB9KTtcblxuICAvLyBHZXQgaW5pdGlhbCBhZ2VudFxuICBjb25zdCB1cGRhdGVBZ2VudCA9ICgpID0+IHtcbiAgICBjb25zdCBhZ2VudCA9IHNlcnZpY2UuY29waWxvdGtpdC5nZXRBZ2VudChlZmZlY3RpdmVBZ2VudElkKTtcbiAgICBhZ2VudFNpZ25hbC5zZXQoYWdlbnQpO1xuICAgIHJldHVybiBhZ2VudDtcbiAgfTtcblxuICAvLyBJbml0aWFsIHVwZGF0ZVxuICBsZXQgY3VycmVudEFnZW50ID0gdXBkYXRlQWdlbnQoKTtcblxuICAvLyBTdWJzY3JpYmUgdG8gYWdlbnQgY2hhbmdlc1xuICBsZXQgYWdlbnRTdWJzY3JpcHRpb246IHsgdW5zdWJzY3JpYmU6ICgpID0+IHZvaWQgfSB8IHVuZGVmaW5lZDtcblxuICBjb25zdCBzdWJzY3JpYmVUb0FnZW50ID0gKCkgPT4ge1xuICAgIC8vIFVuc3Vic2NyaWJlIGZyb20gcHJldmlvdXMgYWdlbnQgaWYgYW55XG4gICAgYWdlbnRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG5cbiAgICBpZiAoY3VycmVudEFnZW50KSB7XG4gICAgICBhZ2VudFN1YnNjcmlwdGlvbiA9IGN1cnJlbnRBZ2VudC5zdWJzY3JpYmUoe1xuICAgICAgICBvbk1lc3NhZ2VzQ2hhbmdlZCgpIHtcbiAgICAgICAgICAvLyBJbmNyZW1lbnQgdGljayB0byBmb3JjZSByZWNvbXB1dGF0aW9uIG9mIG1lc3NhZ2VzIGNvbXB1dGVkXG4gICAgICAgICAgdGljay51cGRhdGUoKHYpID0+IHYgKyAxKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25TdGF0ZUNoYW5nZWQoKSB7XG4gICAgICAgICAgLy8gSW5jcmVtZW50IHRpY2sgdG8gZm9yY2UgcmVjb21wdXRhdGlvblxuICAgICAgICAgIHRpY2sudXBkYXRlKCh2KSA9PiB2ICsgMSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUnVuSW5pdGlhbGl6ZWQoKSB7XG4gICAgICAgICAgaXNSdW5uaW5nU2lnbmFsLnNldCh0cnVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25SdW5GaW5hbGl6ZWQoKSB7XG4gICAgICAgICAgaXNSdW5uaW5nU2lnbmFsLnNldChmYWxzZSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUnVuRmFpbGVkKCkge1xuICAgICAgICAgIGlzUnVubmluZ1NpZ25hbC5zZXQoZmFsc2UpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIC8vIEluaXRpYWwgc3Vic2NyaXB0aW9uXG4gIHN1YnNjcmliZVRvQWdlbnQoKTtcblxuICAvLyBTdWJzY3JpYmUgdG8gQ29waWxvdEtpdCBjaGFuZ2VzIHRvIGRldGVjdCBhZ2VudCB1cGRhdGVzXG4gIGNvbnN0IGNvcmVVbnN1YnNjcmliZSA9IHNlcnZpY2UuY29waWxvdGtpdC5zdWJzY3JpYmUoe1xuICAgIG9uUnVudGltZUxvYWRlZCgpIHtcbiAgICAgIC8vIFJlLWNoZWNrIGFnZW50IHdoZW4gcnVudGltZSBsb2Fkc1xuICAgICAgY3VycmVudEFnZW50ID0gdXBkYXRlQWdlbnQoKTtcbiAgICAgIHN1YnNjcmliZVRvQWdlbnQoKTtcbiAgICB9LFxuICAgIG9uUnVudGltZUxvYWRFcnJvcigpIHtcbiAgICAgIC8vIEFsc28gcmUtY2hlY2sgYWdlbnQgb24gcnVudGltZSBsb2FkIGVycm9yIHRvIGVuc3VyZSBjb25zaXN0ZW5jeVxuICAgICAgY3VycmVudEFnZW50ID0gdXBkYXRlQWdlbnQoKTtcbiAgICAgIHN1YnNjcmliZVRvQWdlbnQoKTtcbiAgICB9LFxuICB9KTtcblxuICAvLyBSZWdpc3RlciBjbGVhbnVwXG4gIGNvbnN0IHVuc3Vic2NyaWJlID0gKCkgPT4ge1xuICAgIGFnZW50U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIGNvcmVVbnN1YnNjcmliZSgpOyAvLyBzdWJzY3JpYmUgcmV0dXJucyBhIGZ1bmN0aW9uIGRpcmVjdGx5XG4gIH07XG5cbiAgZGVzdHJveVJlZi5vbkRlc3Ryb3kodW5zdWJzY3JpYmUpO1xuXG4gIC8vIENyZWF0ZSBvYnNlcnZhYmxlcyBmcm9tIHNpZ25hbHMgdXNpbmcgdG9PYnNlcnZhYmxlXG4gIGNvbnN0IGFnZW50JCA9IHRvT2JzZXJ2YWJsZShhZ2VudFNpZ25hbCk7XG4gIGNvbnN0IGlzUnVubmluZyQgPSB0b09ic2VydmFibGUoaXNSdW5uaW5nU2lnbmFsKTtcbiAgY29uc3QgbWVzc2FnZXMkID0gdG9PYnNlcnZhYmxlKG1lc3NhZ2VzKTtcblxuICByZXR1cm4ge1xuICAgIGFnZW50OiBhZ2VudFNpZ25hbC5hc1JlYWRvbmx5KCksXG4gICAgbWVzc2FnZXM6IG1lc3NhZ2VzLFxuICAgIGlzUnVubmluZzogaXNSdW5uaW5nU2lnbmFsLmFzUmVhZG9ubHkoKSxcbiAgICBhZ2VudCQsXG4gICAgbWVzc2FnZXMkLFxuICAgIGlzUnVubmluZyQsXG4gICAgdW5zdWJzY3JpYmUsXG4gIH07XG59XG5cbi8qKlxuICogR2V0cyBhbiBhZ2VudCBieSBJRCB3aXRob3V0IHN1YnNjcmliaW5nIHRvIGNoYW5nZXMuXG4gKlxuICogQHBhcmFtIHNlcnZpY2UgLSBUaGUgQ29waWxvdEtpdFNlcnZpY2UgaW5zdGFuY2VcbiAqIEBwYXJhbSBhZ2VudElkIC0gT3B0aW9uYWwgYWdlbnQgSUQgKGRlZmF1bHRzIHRvIERFRkFVTFRfQUdFTlRfSUQpXG4gKiBAcmV0dXJucyBUaGUgYWdlbnQgb3IgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBleHBvcnQgY2xhc3MgTXlDb21wb25lbnQge1xuICogICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvcGlsb3RraXQ6IENvcGlsb3RLaXRTZXJ2aWNlKSB7fVxuICpcbiAqICAgZ2V0Q3VycmVudEFnZW50KCkge1xuICogICAgIHJldHVybiBnZXRBZ2VudCh0aGlzLmNvcGlsb3RraXQsICdteS1hZ2VudCcpO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFnZW50KFxuICBzZXJ2aWNlOiBDb3BpbG90S2l0U2VydmljZSxcbiAgYWdlbnRJZD86IHN0cmluZ1xuKTogQWJzdHJhY3RBZ2VudCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGVmZmVjdGl2ZUFnZW50SWQgPSBhZ2VudElkID8/IERFRkFVTFRfQUdFTlRfSUQ7XG4gIHJldHVybiBzZXJ2aWNlLmNvcGlsb3RraXQuZ2V0QWdlbnQoZWZmZWN0aXZlQWdlbnRJZCk7XG59XG5cbi8vIFJlLWV4cG9ydCB0aGUgdHlwZSBmb3IgY29udmVuaWVuY2UgKHRoZSBhY3R1YWwgdHlwZSBpcyBpbiBjb3BpbG90a2l0LnR5cGVzKVxuZXhwb3J0IHR5cGUgeyBBZ2VudFdhdGNoUmVzdWx0IH0gZnJvbSBcIi4uL2NvcmUvY29waWxvdGtpdC50eXBlc1wiO1xuXG4vKipcbiAqIENvbnZlbmllbmNlIHdyYXBwZXIgZm9yIHdhdGNoQWdlbnQgdGhhdCBoYW5kbGVzIGluamVjdGlvbiBjb250ZXh0LlxuICogVXNlZnVsIHdoZW4geW91IG5lZWQgdG8gY2FsbCB3YXRjaEFnZW50IG91dHNpZGUgb2YgYSBjb25zdHJ1Y3RvciBvciBmaWVsZCBpbml0aWFsaXplci5cbiAqXG4gKiBAcGFyYW0gaW5qZWN0b3IgLSBUaGUgQW5ndWxhciBJbmplY3RvciB0byB1c2UgZm9yIGluamVjdGlvbiBjb250ZXh0XG4gKiBAcGFyYW0gY29uZmlnIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbiB3aXRoIGFnZW50SWRcbiAqIEByZXR1cm5zIE9iamVjdCB3aXRoIGFnZW50LCBtZXNzYWdlcywgYW5kIGlzUnVubmluZyBzaWduYWxzIHBsdXMgb2JzZXJ2YWJsZXNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogZXhwb3J0IGNsYXNzIE15Q29tcG9uZW50IHtcbiAqICAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IpIHt9XG4gKlxuICogICBzd2l0Y2hBZ2VudChuZXdBZ2VudElkOiBzdHJpbmcpIHtcbiAqICAgICAvLyBDYW4gY2FsbCBvdXRzaWRlIG9mIGNvbnN0cnVjdG9yIHVzaW5nIHdhdGNoQWdlbnRXaXRoXG4gKiAgICAgY29uc3Qgd2F0Y2hlciA9IHdhdGNoQWdlbnRXaXRoKHRoaXMuaW5qZWN0b3IsIHsgYWdlbnRJZDogbmV3QWdlbnRJZCB9KTtcbiAqICAgICB0aGlzLmFnZW50ID0gd2F0Y2hlci5hZ2VudDtcbiAqICAgICB0aGlzLm1lc3NhZ2VzID0gd2F0Y2hlci5tZXNzYWdlcztcbiAqICAgICB0aGlzLmlzUnVubmluZyA9IHdhdGNoZXIuaXNSdW5uaW5nO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdhdGNoQWdlbnRXaXRoKFxuICBpbmplY3RvcjogSW5qZWN0b3IsXG4gIGNvbmZpZz86IHsgYWdlbnRJZD86IHN0cmluZyB9XG4pOiBBZ2VudFdhdGNoUmVzdWx0IHtcbiAgcmV0dXJuIHJ1bkluSW5qZWN0aW9uQ29udGV4dChpbmplY3RvciwgKCkgPT4gd2F0Y2hBZ2VudChjb25maWcpKTtcbn1cblxuLyoqXG4gKiBTdWJzY3JpYmVzIHRvIGFuIGFnZW50J3MgZXZlbnRzIHdpdGggY3VzdG9tIGNhbGxiYWNrcy5cbiAqIFJldHVybnMgYSBjbGVhbnVwIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGJlIGNhbGxlZCB0byB1bnN1YnNjcmliZS5cbiAqXG4gKiBAcGFyYW0gc2VydmljZSAtIFRoZSBDb3BpbG90S2l0U2VydmljZSBpbnN0YW5jZVxuICogQHBhcmFtIGFnZW50SWQgLSBPcHRpb25hbCBhZ2VudCBJRCAoZGVmYXVsdHMgdG8gREVGQVVMVF9BR0VOVF9JRClcbiAqIEBwYXJhbSBjYWxsYmFja3MgLSBFdmVudCBjYWxsYmFja3NcbiAqIEByZXR1cm5zIENsZWFudXAgZnVuY3Rpb24gdG8gdW5zdWJzY3JpYmVcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogZXhwb3J0IGNsYXNzIE15Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICogICBwcml2YXRlIHVuc3Vic2NyaWJlPzogKCkgPT4gdm9pZDtcbiAqXG4gKiAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY29waWxvdGtpdDogQ29waWxvdEtpdFNlcnZpY2UpIHt9XG4gKlxuICogICBuZ09uSW5pdCgpIHtcbiAqICAgICB0aGlzLnVuc3Vic2NyaWJlID0gc3Vic2NyaWJlVG9BZ2VudCh0aGlzLmNvcGlsb3RraXQsICdteS1hZ2VudCcsIHtcbiAqICAgICAgIG9uUnVuSW5pdGlhbGl6ZWQ6ICgpID0+IGNvbnNvbGUubG9nKCdSdW4gc3RhcnRlZCcpLFxuICogICAgICAgb25SdW5GaW5hbGl6ZWQ6ICgpID0+IGNvbnNvbGUubG9nKCdSdW4gY29tcGxldGVkJyksXG4gKiAgICAgICBvblJ1bkZhaWxlZDogKGVycm9yKSA9PiBjb25zb2xlLmVycm9yKCdSdW4gZmFpbGVkJywgZXJyb3IpLFxuICogICAgIH0pO1xuICogICB9XG4gKlxuICogICBuZ09uRGVzdHJveSgpIHtcbiAqICAgICB0aGlzLnVuc3Vic2NyaWJlPy4oKTtcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJzY3JpYmVUb0FnZW50KFxuICBzZXJ2aWNlOiBDb3BpbG90S2l0U2VydmljZSxcbiAgYWdlbnRJZD86IHN0cmluZyxcbiAgY2FsbGJhY2tzPzogQWdlbnRTdWJzY3JpcHRpb25DYWxsYmFja3Ncbik6ICgpID0+IHZvaWQge1xuICBjb25zdCBlZmZlY3RpdmVBZ2VudElkID0gYWdlbnRJZCA/PyBERUZBVUxUX0FHRU5UX0lEO1xuICBjb25zdCBhZ2VudCA9IHNlcnZpY2UuY29waWxvdGtpdC5nZXRBZ2VudChlZmZlY3RpdmVBZ2VudElkKTtcblxuICBpZiAoIWFnZW50KSB7XG4gICAgLy8gUmV0dXJuIG5vLW9wIGNsZWFudXAgaWYgYWdlbnQgZG9lc24ndCBleGlzdFxuICAgIHJldHVybiAoKSA9PiB7fTtcbiAgfVxuXG4gIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGFnZW50LnN1YnNjcmliZSh7XG4gICAgb25NZXNzYWdlc0NoYW5nZWQ6IGNhbGxiYWNrcz8ub25NZXNzYWdlc0NoYW5nZWQsXG4gICAgb25TdGF0ZUNoYW5nZWQ6IGNhbGxiYWNrcz8ub25TdGF0ZUNoYW5nZWQsXG4gICAgb25SdW5Jbml0aWFsaXplZDogY2FsbGJhY2tzPy5vblJ1bkluaXRpYWxpemVkLFxuICAgIG9uUnVuRmluYWxpemVkOiBjYWxsYmFja3M/Lm9uUnVuRmluYWxpemVkLFxuICAgIG9uUnVuRmFpbGVkOiBjYWxsYmFja3M/Lm9uUnVuRmFpbGVkLFxuICB9KTtcblxuICByZXR1cm4gKCkgPT4gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG59XG4iXX0=
|
|
212
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvYWdlbnQudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFVBQVUsRUFDVixNQUFNLEVBQ04sTUFBTSxFQUNOLFFBQVEsRUFFUixxQkFBcUIsR0FDdEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBTS9ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTdFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQUMsTUFBNkI7SUFDdEQsbURBQW1EO0lBQ25ELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0QyxNQUFNLGdCQUFnQixHQUFHLE1BQU0sRUFBRSxPQUFPLElBQUksZ0JBQWdCLENBQUM7SUFFN0QsbUVBQW1FO0lBQ25FLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBNEIsU0FBUyxDQUFDLENBQUM7SUFDakUsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFTLENBQUMsQ0FBQyxDQUFDO0lBQy9CLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUUvQyw4REFBOEQ7SUFDOUQsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUM3QixzQ0FBc0M7UUFDdEMsSUFBSSxFQUFFLENBQUM7UUFDUCxNQUFNLENBQUMsR0FBRyxXQUFXLEVBQUUsQ0FBQztRQUN4QixJQUFJLENB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YztRQUN6QyxXQUFXLEVBQUUsU0FBUyxFQUFFLFdBQVc7S0FDcEMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDMUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERlc3Ryb3lSZWYsXG4gIGluamVjdCxcbiAgc2lnbmFsLFxuICBjb21wdXRlZCxcbiAgSW5qZWN0b3IsXG4gIHJ1bkluSW5qZWN0aW9uQ29udGV4dCxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcFwiO1xuaW1wb3J0IHsgQ29waWxvdEtpdFNlcnZpY2UgfSBmcm9tIFwiLi4vY29yZS9jb3BpbG90a2l0LnNlcnZpY2VcIjtcbmltcG9ydCB7XG4gIEFnZW50U3Vic2NyaXB0aW9uQ2FsbGJhY2tzLFxuICBBZ2VudFdhdGNoUmVzdWx0LFxufSBmcm9tIFwiLi4vY29yZS9jb3BpbG90a2l0LnR5cGVzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdEFnZW50IH0gZnJvbSBcIkBhZy11aS9jbGllbnRcIjtcbmltcG9ydCB7IERFRkFVTFRfQUdFTlRfSUQgfSBmcm9tIFwiQGNvcGlsb3RraXRuZXh0L3NoYXJlZFwiO1xuaW1wb3J0IHsgQ29waWxvdEtpdENvcmVSdW50aW1lQ29ubmVjdGlvblN0YXR1cyB9IGZyb20gXCJAY29waWxvdGtpdG5leHQvY29yZVwiO1xuXG4vKipcbiAqIFdhdGNoZXMgYW4gYWdlbnQgYW5kIHByb3ZpZGVzIHJlYWN0aXZlIHNpZ25hbHMgZm9yIGl0cyBzdGF0ZS5cbiAqIE11c3QgYmUgY2FsbGVkIHdpdGhpbiBhbiBpbmplY3Rpb24gY29udGV4dC5cbiAqIEF1dG9tYXRpY2FsbHkgY2xlYW5zIHVwIHdoZW4gdGhlIGNvbXBvbmVudC9zZXJ2aWNlIGlzIGRlc3Ryb3llZC5cbiAqXG4gKiBAcGFyYW0gY29uZmlnIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbiB3aXRoIGFnZW50SWRcbiAqIEByZXR1cm5zIE9iamVjdCB3aXRoIGFnZW50LCBtZXNzYWdlcywgYW5kIGlzUnVubmluZyBzaWduYWxzIHBsdXMgb2JzZXJ2YWJsZXNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogZXhwb3J0IGNsYXNzIE15Q29tcG9uZW50IHtcbiAqICAgLy8gQXV0b21hdGljYWxseSB0cmFja3MgYWdlbnQgc3RhdGVcbiAqICAgYWdlbnRTdGF0ZSA9IHdhdGNoQWdlbnQoeyBhZ2VudElkOiAnbXktYWdlbnQnIH0pO1xuICpcbiAqICAgY29uc3RydWN0b3IoKSB7XG4gKiAgICAgZWZmZWN0KCgpID0+IHtcbiAqICAgICAgIGNvbnN0IG1lc3NhZ2VzID0gdGhpcy5hZ2VudFN0YXRlLm1lc3NhZ2VzKCk7XG4gKiAgICAgICBjb25zdCBpc1J1bm5pbmcgPSB0aGlzLmFnZW50U3RhdGUuaXNSdW5uaW5nKCk7XG4gKiAgICAgICBjb25zb2xlLmxvZygnTWVzc2FnZXM6JywgbWVzc2FnZXMubGVuZ3RoLCAnUnVubmluZzonLCBpc1J1bm5pbmcpO1xuICogICAgIH0pO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdhdGNoQWdlbnQoY29uZmlnPzogeyBhZ2VudElkPzogc3RyaW5nIH0pOiBBZ2VudFdhdGNoUmVzdWx0IHtcbiAgLy8gVXNlIGluamVjdCgpIGludGVybmFsbHkgdG8gZ2V0IHJlcXVpcmVkIHNlcnZpY2VzXG4gIGNvbnN0IHNlcnZpY2UgPSBpbmplY3QoQ29waWxvdEtpdFNlcnZpY2UpO1xuICBjb25zdCBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBjb25zdCBlZmZlY3RpdmVBZ2VudElkID0gY29uZmlnPy5hZ2VudElkID8/IERFRkFVTFRfQUdFTlRfSUQ7XG5cbiAgLy8gQ3JlYXRlIHJlYWN0aXZlIHNpZ25hbHMgd2l0aCB0aWNrIG1lY2hhbmlzbSBmb3IgcmVsaWFibGUgdXBkYXRlc1xuICBjb25zdCBhZ2VudFNpZ25hbCA9IHNpZ25hbDxBYnN0cmFjdEFnZW50IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBjb25zdCB0aWNrID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIGNvbnN0IGlzUnVubmluZ1NpZ25hbCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgLy8gQ3JlYXRlIGNvbXB1dGVkIG1lc3NhZ2VzIHNpZ25hbCB0aGF0IHJlYWN0cyB0byB0aWNrIGNoYW5nZXNcbiAgY29uc3QgbWVzc2FnZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgLy8gQWNjZXNzIHRpY2sgdG8gZW5zdXJlIHJlY29tcHV0YXRpb25cbiAgICB0aWNrKCk7XG4gICAgY29uc3QgYSA9IGFnZW50U2lnbmFsKCk7XG4gICAgaWYgKCFhKSByZXR1cm4gW107XG4gICAgLy8gUmV0dXJuIGEgc2hhbGxvdyBjbG9uZSB0byBlbnN1cmUgY2hhbmdlIGRldGVjdGlvblxuICAgIHJldHVybiBhLm1lc3NhZ2VzLm1hcCgobSkgPT4gKHsgLi4ubSB9KSk7XG4gIH0pO1xuXG4gIC8vIEdldCBpbml0aWFsIGFnZW50XG4gIGNvbnN0IHVwZGF0ZUFnZW50ID0gKCkgPT4ge1xuICAgIGNvbnN0IGFnZW50ID0gc2VydmljZS5jb3BpbG90a2l0LmdldEFnZW50KGVmZmVjdGl2ZUFnZW50SWQpO1xuICAgIGFnZW50U2lnbmFsLnNldChhZ2VudCk7XG4gICAgcmV0dXJuIGFnZW50O1xuICB9O1xuXG4gIC8vIEluaXRpYWwgdXBkYXRlXG4gIGxldCBjdXJyZW50QWdlbnQgPSB1cGRhdGVBZ2VudCgpO1xuXG4gIC8vIFN1YnNjcmliZSB0byBhZ2VudCBjaGFuZ2VzXG4gIGxldCBhZ2VudFN1YnNjcmlwdGlvbjogeyB1bnN1YnNjcmliZTogKCkgPT4gdm9pZCB9IHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHN1YnNjcmliZVRvQWdlbnQgPSAoKSA9PiB7XG4gICAgLy8gVW5zdWJzY3JpYmUgZnJvbSBwcmV2aW91cyBhZ2VudCBpZiBhbnlcbiAgICBhZ2VudFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcblxuICAgIGlmIChjdXJyZW50QWdlbnQpIHtcbiAgICAgIGFnZW50U3Vic2NyaXB0aW9uID0gY3VycmVudEFnZW50LnN1YnNjcmliZSh7XG4gICAgICAgIG9uTWVzc2FnZXNDaGFuZ2VkKCkge1xuICAgICAgICAgIC8vIEluY3JlbWVudCB0aWNrIHRvIGZvcmNlIHJlY29tcHV0YXRpb24gb2YgbWVzc2FnZXMgY29tcHV0ZWRcbiAgICAgICAgICB0aWNrLnVwZGF0ZSgodikgPT4gdiArIDEpO1xuICAgICAgICB9LFxuICAgICAgICBvblN0YXRlQ2hhbmdlZCgpIHtcbiAgICAgICAgICAvLyBJbmNyZW1lbnQgdGljayB0byBmb3JjZSByZWNvbXB1dGF0aW9uXG4gICAgICAgICAgdGljay51cGRhdGUoKHYpID0+IHYgKyAxKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25SdW5Jbml0aWFsaXplZCgpIHtcbiAgICAgICAgICBpc1J1bm5pbmdTaWduYWwuc2V0KHRydWUpO1xuICAgICAgICB9LFxuICAgICAgICBvblJ1bkZpbmFsaXplZCgpIHtcbiAgICAgICAgICBpc1J1bm5pbmdTaWduYWwuc2V0KGZhbHNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25SdW5GYWlsZWQoKSB7XG4gICAgICAgICAgaXNSdW5uaW5nU2lnbmFsLnNldChmYWxzZSk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgLy8gSW5pdGlhbCBzdWJzY3JpcHRpb25cbiAgc3Vic2NyaWJlVG9BZ2VudCgpO1xuXG4gIC8vIFN1YnNjcmliZSB0byBDb3BpbG90S2l0IGNoYW5nZXMgdG8gZGV0ZWN0IGFnZW50IHVwZGF0ZXNcbiAgY29uc3QgY29yZVVuc3Vic2NyaWJlID0gc2VydmljZS5jb3BpbG90a2l0LnN1YnNjcmliZSh7XG4gICAgb25SdW50aW1lQ29ubmVjdGlvblN0YXR1c0NoYW5nZWQoeyBzdGF0dXMgfSkge1xuICAgICAgaWYgKFxuICAgICAgICBzdGF0dXMgPT09IENvcGlsb3RLaXRDb3JlUnVudGltZUNvbm5lY3Rpb25TdGF0dXMuQ29ubmVjdGVkIHx8XG4gICAgICAgIHN0YXR1cyA9PT0gQ29waWxvdEtpdENvcmVSdW50aW1lQ29ubmVjdGlvblN0YXR1cy5EaXNjb25uZWN0ZWQgfHxcbiAgICAgICAgc3RhdHVzID09PSBDb3BpbG90S2l0Q29yZVJ1bnRpbWVDb25uZWN0aW9uU3RhdHVzLkVycm9yXG4gICAgICApIHtcbiAgICAgICAgLy8gUmUtY2hlY2sgYWdlbnQgd2hlbiBydW50aW1lIGNvbm5lY3Rpb24gc3RhdGUgY2hhbmdlc1xuICAgICAgICBjdXJyZW50QWdlbnQgPSB1cGRhdGVBZ2VudCgpO1xuICAgICAgICBzdWJzY3JpYmVUb0FnZW50KCk7XG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gUmVnaXN0ZXIgY2xlYW51cFxuICBjb25zdCB1bnN1YnNjcmliZSA9ICgpID0+IHtcbiAgICBhZ2VudFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICBjb3JlVW5zdWJzY3JpYmUoKTsgLy8gc3Vic2NyaWJlIHJldHVybnMgYSBmdW5jdGlvbiBkaXJlY3RseVxuICB9O1xuXG4gIGRlc3Ryb3lSZWYub25EZXN0cm95KHVuc3Vic2NyaWJlKTtcblxuICAvLyBDcmVhdGUgb2JzZXJ2YWJsZXMgZnJvbSBzaWduYWxzIHVzaW5nIHRvT2JzZXJ2YWJsZVxuICBjb25zdCBhZ2VudCQgPSB0b09ic2VydmFibGUoYWdlbnRTaWduYWwpO1xuICBjb25zdCBpc1J1bm5pbmckID0gdG9PYnNlcnZhYmxlKGlzUnVubmluZ1NpZ25hbCk7XG4gIGNvbnN0IG1lc3NhZ2VzJCA9IHRvT2JzZXJ2YWJsZShtZXNzYWdlcyk7XG5cbiAgcmV0dXJuIHtcbiAgICBhZ2VudDogYWdlbnRTaWduYWwuYXNSZWFkb25seSgpLFxuICAgIG1lc3NhZ2VzOiBtZXNzYWdlcyxcbiAgICBpc1J1bm5pbmc6IGlzUnVubmluZ1NpZ25hbC5hc1JlYWRvbmx5KCksXG4gICAgYWdlbnQkLFxuICAgIG1lc3NhZ2VzJCxcbiAgICBpc1J1bm5pbmckLFxuICAgIHVuc3Vic2NyaWJlLFxuICB9O1xufVxuXG4vKipcbiAqIEdldHMgYW4gYWdlbnQgYnkgSUQgd2l0aG91dCBzdWJzY3JpYmluZyB0byBjaGFuZ2VzLlxuICpcbiAqIEBwYXJhbSBzZXJ2aWNlIC0gVGhlIENvcGlsb3RLaXRTZXJ2aWNlIGluc3RhbmNlXG4gKiBAcGFyYW0gYWdlbnRJZCAtIE9wdGlvbmFsIGFnZW50IElEIChkZWZhdWx0cyB0byBERUZBVUxUX0FHRU5UX0lEKVxuICogQHJldHVybnMgVGhlIGFnZW50IG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmRcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogZXhwb3J0IGNsYXNzIE15Q29tcG9uZW50IHtcbiAqICAgY29uc3RydWN0b3IocHJpdmF0ZSBjb3BpbG90a2l0OiBDb3BpbG90S2l0U2VydmljZSkge31cbiAqXG4gKiAgIGdldEN1cnJlbnRBZ2VudCgpIHtcbiAqICAgICByZXR1cm4gZ2V0QWdlbnQodGhpcy5jb3BpbG90a2l0LCAnbXktYWdlbnQnKTtcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBZ2VudChcbiAgc2VydmljZTogQ29waWxvdEtpdFNlcnZpY2UsXG4gIGFnZW50SWQ/OiBzdHJpbmdcbik6IEFic3RyYWN0QWdlbnQgfCB1bmRlZmluZWQge1xuICBjb25zdCBlZmZlY3RpdmVBZ2VudElkID0gYWdlbnRJZCA/PyBERUZBVUxUX0FHRU5UX0lEO1xuICByZXR1cm4gc2VydmljZS5jb3BpbG90a2l0LmdldEFnZW50KGVmZmVjdGl2ZUFnZW50SWQpO1xufVxuXG4vLyBSZS1leHBvcnQgdGhlIHR5cGUgZm9yIGNvbnZlbmllbmNlICh0aGUgYWN0dWFsIHR5cGUgaXMgaW4gY29waWxvdGtpdC50eXBlcylcbmV4cG9ydCB0eXBlIHsgQWdlbnRXYXRjaFJlc3VsdCB9IGZyb20gXCIuLi9jb3JlL2NvcGlsb3RraXQudHlwZXNcIjtcblxuLyoqXG4gKiBDb252ZW5pZW5jZSB3cmFwcGVyIGZvciB3YXRjaEFnZW50IHRoYXQgaGFuZGxlcyBpbmplY3Rpb24gY29udGV4dC5cbiAqIFVzZWZ1bCB3aGVuIHlvdSBuZWVkIHRvIGNhbGwgd2F0Y2hBZ2VudCBvdXRzaWRlIG9mIGEgY29uc3RydWN0b3Igb3IgZmllbGQgaW5pdGlhbGl6ZXIuXG4gKlxuICogQHBhcmFtIGluamVjdG9yIC0gVGhlIEFuZ3VsYXIgSW5qZWN0b3IgdG8gdXNlIGZvciBpbmplY3Rpb24gY29udGV4dFxuICogQHBhcmFtIGNvbmZpZyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gd2l0aCBhZ2VudElkXG4gKiBAcmV0dXJucyBPYmplY3Qgd2l0aCBhZ2VudCwgbWVzc2FnZXMsIGFuZCBpc1J1bm5pbmcgc2lnbmFscyBwbHVzIG9ic2VydmFibGVzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGV4cG9ydCBjbGFzcyBNeUNvbXBvbmVudCB7XG4gKiAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yKSB7fVxuICpcbiAqICAgc3dpdGNoQWdlbnQobmV3QWdlbnRJZDogc3RyaW5nKSB7XG4gKiAgICAgLy8gQ2FuIGNhbGwgb3V0c2lkZSBvZiBjb25zdHJ1Y3RvciB1c2luZyB3YXRjaEFnZW50V2l0aFxuICogICAgIGNvbnN0IHdhdGNoZXIgPSB3YXRjaEFnZW50V2l0aCh0aGlzLmluamVjdG9yLCB7IGFnZW50SWQ6IG5ld0FnZW50SWQgfSk7XG4gKiAgICAgdGhpcy5hZ2VudCA9IHdhdGNoZXIuYWdlbnQ7XG4gKiAgICAgdGhpcy5tZXNzYWdlcyA9IHdhdGNoZXIubWVzc2FnZXM7XG4gKiAgICAgdGhpcy5pc1J1bm5pbmcgPSB3YXRjaGVyLmlzUnVubmluZztcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YXRjaEFnZW50V2l0aChcbiAgaW5qZWN0b3I6IEluamVjdG9yLFxuICBjb25maWc/OiB7IGFnZW50SWQ/OiBzdHJpbmcgfVxuKTogQWdlbnRXYXRjaFJlc3VsdCB7XG4gIHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IHdhdGNoQWdlbnQoY29uZmlnKSk7XG59XG5cbi8qKlxuICogU3Vic2NyaWJlcyB0byBhbiBhZ2VudCdzIGV2ZW50cyB3aXRoIGN1c3RvbSBjYWxsYmFja3MuXG4gKiBSZXR1cm5zIGEgY2xlYW51cCBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSBjYWxsZWQgdG8gdW5zdWJzY3JpYmUuXG4gKlxuICogQHBhcmFtIHNlcnZpY2UgLSBUaGUgQ29waWxvdEtpdFNlcnZpY2UgaW5zdGFuY2VcbiAqIEBwYXJhbSBhZ2VudElkIC0gT3B0aW9uYWwgYWdlbnQgSUQgKGRlZmF1bHRzIHRvIERFRkFVTFRfQUdFTlRfSUQpXG4gKiBAcGFyYW0gY2FsbGJhY2tzIC0gRXZlbnQgY2FsbGJhY2tzXG4gKiBAcmV0dXJucyBDbGVhbnVwIGZ1bmN0aW9uIHRvIHVuc3Vic2NyaWJlXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGV4cG9ydCBjbGFzcyBNeUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAqICAgcHJpdmF0ZSB1bnN1YnNjcmliZT86ICgpID0+IHZvaWQ7XG4gKlxuICogICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvcGlsb3RraXQ6IENvcGlsb3RLaXRTZXJ2aWNlKSB7fVxuICpcbiAqICAgbmdPbkluaXQoKSB7XG4gKiAgICAgdGhpcy51bnN1YnNjcmliZSA9IHN1YnNjcmliZVRvQWdlbnQodGhpcy5jb3BpbG90a2l0LCAnbXktYWdlbnQnLCB7XG4gKiAgICAgICBvblJ1bkluaXRpYWxpemVkOiAoKSA9PiBjb25zb2xlLmxvZygnUnVuIHN0YXJ0ZWQnKSxcbiAqICAgICAgIG9uUnVuRmluYWxpemVkOiAoKSA9PiBjb25zb2xlLmxvZygnUnVuIGNvbXBsZXRlZCcpLFxuICogICAgICAgb25SdW5GYWlsZWQ6IChlcnJvcikgPT4gY29uc29sZS5lcnJvcignUnVuIGZhaWxlZCcsIGVycm9yKSxcbiAqICAgICB9KTtcbiAqICAgfVxuICpcbiAqICAgbmdPbkRlc3Ryb3koKSB7XG4gKiAgICAgdGhpcy51bnN1YnNjcmliZT8uKCk7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3Vic2NyaWJlVG9BZ2VudChcbiAgc2VydmljZTogQ29waWxvdEtpdFNlcnZpY2UsXG4gIGFnZW50SWQ/OiBzdHJpbmcsXG4gIGNhbGxiYWNrcz86IEFnZW50U3Vic2NyaXB0aW9uQ2FsbGJhY2tzXG4pOiAoKSA9PiB2b2lkIHtcbiAgY29uc3QgZWZmZWN0aXZlQWdlbnRJZCA9IGFnZW50SWQgPz8gREVGQVVMVF9BR0VOVF9JRDtcbiAgY29uc3QgYWdlbnQgPSBzZXJ2aWNlLmNvcGlsb3RraXQuZ2V0QWdlbnQoZWZmZWN0aXZlQWdlbnRJZCk7XG5cbiAgaWYgKCFhZ2VudCkge1xuICAgIC8vIFJldHVybiBuby1vcCBjbGVhbnVwIGlmIGFnZW50IGRvZXNuJ3QgZXhpc3RcbiAgICByZXR1cm4gKCkgPT4ge307XG4gIH1cblxuICBjb25zdCBzdWJzY3JpcHRpb24gPSBhZ2VudC5zdWJzY3JpYmUoe1xuICAgIG9uTWVzc2FnZXNDaGFuZ2VkOiBjYWxsYmFja3M/Lm9uTWVzc2FnZXNDaGFuZ2VkLFxuICAgIG9uU3RhdGVDaGFuZ2VkOiBjYWxsYmFja3M/Lm9uU3RhdGVDaGFuZ2VkLFxuICAgIG9uUnVuSW5pdGlhbGl6ZWQ6IGNhbGxiYWNrcz8ub25SdW5Jbml0aWFsaXplZCxcbiAgICBvblJ1bkZpbmFsaXplZDogY2FsbGJhY2tzPy5vblJ1bkZpbmFsaXplZCxcbiAgICBvblJ1bkZhaWxlZDogY2FsbGJhY2tzPy5vblJ1bkZhaWxlZCxcbiAgfSk7XG5cbiAgcmV0dXJuICgpID0+IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xufVxuIl19
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { InjectionToken, signal, computed, effect, untracked, Inject, Injectable, Optional, inject, DestroyRef, runInInjectionContext, ChangeDetectionStrategy, Component, ElementRef, ViewContainerRef, HostListener, Input, Directive, isDevMode, EventEmitter, Output, TemplateRef, ViewChild, ViewEncapsulation, ContentChild, ChangeDetectorRef, PLATFORM_ID, forwardRef, SkipSelf } from '@angular/core';
|
|
3
3
|
import { toObservable } from '@angular/core/rxjs-interop';
|
|
4
|
-
import { CopilotKitCore, ToolCallStatus, completePartialMarkdown } from '@copilotkitnext/core';
|
|
4
|
+
import { CopilotKitCore, CopilotKitCoreRuntimeConnectionStatus, ToolCallStatus, completePartialMarkdown, ProxiedCopilotRuntimeAgent } from '@copilotkitnext/core';
|
|
5
5
|
export { ToolCallStatus } from '@copilotkitnext/core';
|
|
6
6
|
import { DEFAULT_AGENT_ID, partialJSONParse, randomUUID } from '@copilotkitnext/shared';
|
|
7
7
|
import { Overlay, OverlayPositionBuilder, OverlayModule } from '@angular/cdk/overlay';
|
|
@@ -108,26 +108,24 @@ class CopilotKitService {
|
|
|
108
108
|
this._runtimeStateVersion = signal(0);
|
|
109
109
|
// Initialize computed signals for processed values
|
|
110
110
|
this._allTools = computed(() => {
|
|
111
|
-
const
|
|
112
|
-
// Add frontend tools
|
|
111
|
+
const toolMap = new Map();
|
|
113
112
|
this._frontendTools().forEach((tool) => {
|
|
114
|
-
|
|
113
|
+
toolMap.set(tool.name, tool);
|
|
115
114
|
});
|
|
116
|
-
// Process human-in-the-loop tools
|
|
117
115
|
this._humanInTheLoop().forEach((tool) => {
|
|
118
116
|
const frontendTool = {
|
|
119
117
|
name: tool.name,
|
|
120
118
|
description: tool.description,
|
|
121
119
|
parameters: tool.parameters,
|
|
122
120
|
followUp: tool.followUp,
|
|
123
|
-
handler: async (
|
|
121
|
+
handler: async () => {
|
|
124
122
|
console.warn(`Human-in-the-loop tool '${tool.name}' called but no interactive handler is set up.`);
|
|
125
123
|
return undefined;
|
|
126
124
|
},
|
|
127
125
|
};
|
|
128
|
-
|
|
126
|
+
toolMap.set(tool.name, frontendTool);
|
|
129
127
|
});
|
|
130
|
-
return
|
|
128
|
+
return Array.from(toolMap.values());
|
|
131
129
|
});
|
|
132
130
|
this._allRenderToolCalls = computed(() => {
|
|
133
131
|
const combined = [...this._renderToolCalls()];
|
|
@@ -194,11 +192,11 @@ class CopilotKitService {
|
|
|
194
192
|
* Process frontend tools and human-in-the-loop tools
|
|
195
193
|
*/
|
|
196
194
|
processTools(frontendTools, humanInTheLoop, renderToolCalls) {
|
|
197
|
-
const
|
|
195
|
+
const toolMap = new Map();
|
|
198
196
|
const allRenderToolCalls = [...renderToolCalls];
|
|
199
197
|
// Add frontend tools
|
|
200
198
|
frontendTools.forEach((tool) => {
|
|
201
|
-
|
|
199
|
+
toolMap.set(tool.name, tool);
|
|
202
200
|
// Add render component if provided
|
|
203
201
|
if (tool.render) {
|
|
204
202
|
allRenderToolCalls.push({
|
|
@@ -223,7 +221,7 @@ class CopilotKitService {
|
|
|
223
221
|
return undefined;
|
|
224
222
|
},
|
|
225
223
|
};
|
|
226
|
-
|
|
224
|
+
toolMap.set(tool.name, frontendTool);
|
|
227
225
|
// Add the render component
|
|
228
226
|
if (tool.render) {
|
|
229
227
|
allRenderToolCalls.push({
|
|
@@ -233,7 +231,7 @@ class CopilotKitService {
|
|
|
233
231
|
});
|
|
234
232
|
}
|
|
235
233
|
});
|
|
236
|
-
return { allTools, allRenderToolCalls };
|
|
234
|
+
return { allTools: Array.from(toolMap.values()), allRenderToolCalls };
|
|
237
235
|
}
|
|
238
236
|
/**
|
|
239
237
|
* Setup stability warning effects
|
|
@@ -268,7 +266,9 @@ class CopilotKitService {
|
|
|
268
266
|
// Sync runtime URL
|
|
269
267
|
effect(() => {
|
|
270
268
|
const url = this.runtimeUrl();
|
|
271
|
-
untracked(() =>
|
|
269
|
+
untracked(() => {
|
|
270
|
+
this.copilotkit.setRuntimeUrl(url);
|
|
271
|
+
});
|
|
272
272
|
});
|
|
273
273
|
// Sync headers
|
|
274
274
|
effect(() => {
|
|
@@ -288,9 +288,11 @@ class CopilotKitService {
|
|
|
288
288
|
// Sync tools - computed from frontend tools and human-in-the-loop
|
|
289
289
|
effect(() => {
|
|
290
290
|
const tools = this._allTools();
|
|
291
|
-
// Update copilotkit.tools directly since there's no setTools method
|
|
292
291
|
untracked(() => {
|
|
293
|
-
this.copilotkit
|
|
292
|
+
const setTools = this.copilotkit?.setTools;
|
|
293
|
+
if (typeof setTools === "function") {
|
|
294
|
+
setTools.call(this.copilotkit, tools);
|
|
295
|
+
}
|
|
294
296
|
});
|
|
295
297
|
});
|
|
296
298
|
}
|
|
@@ -299,12 +301,7 @@ class CopilotKitService {
|
|
|
299
301
|
*/
|
|
300
302
|
setupEventSubscription() {
|
|
301
303
|
const unsubscribe = this.copilotkit.subscribe({
|
|
302
|
-
|
|
303
|
-
// Increment version to notify all consumers that runtime state has changed
|
|
304
|
-
// This triggers re-evaluation of computed signals that depend on runtime state
|
|
305
|
-
this.notifyRuntimeStateChange();
|
|
306
|
-
},
|
|
307
|
-
onRuntimeLoadError: () => {
|
|
304
|
+
onRuntimeConnectionStatusChanged: () => {
|
|
308
305
|
// Increment version to notify all consumers that runtime state has changed
|
|
309
306
|
// This triggers re-evaluation of computed signals that depend on runtime state
|
|
310
307
|
this.notifyRuntimeStateChange();
|
|
@@ -1138,15 +1135,14 @@ function watchAgent(config) {
|
|
|
1138
1135
|
subscribeToAgent();
|
|
1139
1136
|
// Subscribe to CopilotKit changes to detect agent updates
|
|
1140
1137
|
const coreUnsubscribe = service.copilotkit.subscribe({
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
subscribeToAgent();
|
|
1138
|
+
onRuntimeConnectionStatusChanged({ status }) {
|
|
1139
|
+
if (status === CopilotKitCoreRuntimeConnectionStatus.Connected ||
|
|
1140
|
+
status === CopilotKitCoreRuntimeConnectionStatus.Disconnected ||
|
|
1141
|
+
status === CopilotKitCoreRuntimeConnectionStatus.Error) {
|
|
1142
|
+
// Re-check agent when runtime connection state changes
|
|
1143
|
+
currentAgent = updateAgent();
|
|
1144
|
+
subscribeToAgent();
|
|
1145
|
+
}
|
|
1150
1146
|
},
|
|
1151
1147
|
});
|
|
1152
1148
|
// Register cleanup
|
|
@@ -2446,9 +2442,12 @@ class CopilotKitAgentDirective {
|
|
|
2446
2442
|
subscribeToCore() {
|
|
2447
2443
|
// Subscribe to CopilotKit changes to detect agent updates
|
|
2448
2444
|
this.coreUnsubscribe = this.copilotkit.copilotkit.subscribe({
|
|
2449
|
-
|
|
2450
|
-
|
|
2451
|
-
|
|
2445
|
+
onRuntimeConnectionStatusChanged: ({ status }) => {
|
|
2446
|
+
if (status === CopilotKitCoreRuntimeConnectionStatus.Connected ||
|
|
2447
|
+
status === CopilotKitCoreRuntimeConnectionStatus.Disconnected) {
|
|
2448
|
+
// Re-check agent when runtime connection changes state
|
|
2449
|
+
this.setupAgent();
|
|
2450
|
+
}
|
|
2452
2451
|
},
|
|
2453
2452
|
});
|
|
2454
2453
|
}
|
|
@@ -4567,7 +4566,7 @@ class CopilotChatInputComponent {
|
|
|
4567
4566
|
else if (this.audioRecorderRef?.getState() === 'recording') {
|
|
4568
4567
|
this.audioRecorderRef.stop().catch(console.error);
|
|
4569
4568
|
}
|
|
4570
|
-
});
|
|
4569
|
+
}, { allowSignalWrites: true });
|
|
4571
4570
|
// Sync with chat configuration
|
|
4572
4571
|
effect(() => {
|
|
4573
4572
|
const configValue = this.chatConfig?.inputValue();
|
|
@@ -9124,6 +9123,7 @@ class CopilotChatComponent {
|
|
|
9124
9123
|
injector;
|
|
9125
9124
|
agentId;
|
|
9126
9125
|
threadId;
|
|
9126
|
+
inputComponent;
|
|
9127
9127
|
constructor(chatConfig, cdr, injector) {
|
|
9128
9128
|
this.chatConfig = chatConfig;
|
|
9129
9129
|
this.cdr = cdr;
|
|
@@ -9140,7 +9140,7 @@ class CopilotChatComponent {
|
|
|
9140
9140
|
a.threadId = this.threadId || this.generatedThreadId;
|
|
9141
9141
|
if (!this.hasConnectedOnce) {
|
|
9142
9142
|
this.hasConnectedOnce = true;
|
|
9143
|
-
if (
|
|
9143
|
+
if (a instanceof ProxiedCopilotRuntimeAgent) {
|
|
9144
9144
|
this.connectToAgent(a);
|
|
9145
9145
|
}
|
|
9146
9146
|
else {
|
|
@@ -9259,7 +9259,7 @@ class CopilotChatComponent {
|
|
|
9259
9259
|
this.hasConnectedOnce = false;
|
|
9260
9260
|
}
|
|
9261
9261
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatComponent, deps: [{ token: CopilotChatConfigurationService, optional: true }, { token: i0.ChangeDetectorRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
|
|
9262
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CopilotChatComponent, isStandalone: true, selector: "copilot-chat", inputs: { agentId: "agentId", threadId: "threadId" }, providers: [
|
|
9262
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CopilotChatComponent, isStandalone: true, selector: "copilot-chat", inputs: { agentId: "agentId", threadId: "threadId", inputComponent: "inputComponent" }, providers: [
|
|
9263
9263
|
{
|
|
9264
9264
|
provide: CopilotChatConfigurationService,
|
|
9265
9265
|
deps: [
|
|
@@ -9274,6 +9274,7 @@ class CopilotChatComponent {
|
|
|
9274
9274
|
[autoScroll]="true"
|
|
9275
9275
|
[messageViewClass]="'w-full'"
|
|
9276
9276
|
[showCursor]="showCursor()"
|
|
9277
|
+
[inputComponent]="inputComponent"
|
|
9277
9278
|
>
|
|
9278
9279
|
</copilot-chat-view>
|
|
9279
9280
|
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: CopilotChatViewComponent, 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 });
|
|
@@ -9302,6 +9303,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
9302
9303
|
[autoScroll]="true"
|
|
9303
9304
|
[messageViewClass]="'w-full'"
|
|
9304
9305
|
[showCursor]="showCursor()"
|
|
9306
|
+
[inputComponent]="inputComponent"
|
|
9305
9307
|
>
|
|
9306
9308
|
</copilot-chat-view>
|
|
9307
9309
|
`,
|
|
@@ -9312,6 +9314,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
9312
9314
|
type: Input
|
|
9313
9315
|
}], threadId: [{
|
|
9314
9316
|
type: Input
|
|
9317
|
+
}], inputComponent: [{
|
|
9318
|
+
type: Input
|
|
9315
9319
|
}] } });
|
|
9316
9320
|
|
|
9317
9321
|
// Testing utilities are not exported from the main entry point
|