@copilotkitnext/angular 0.0.2 → 0.0.4
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 +3 -3
- package/dist/README.md +3 -3
- package/dist/components/chat/copilot-chat-assistant-message.component.d.ts +10 -10
- package/dist/components/chat/copilot-chat-message-view.component.d.ts +42 -42
- package/dist/components/chat/copilot-chat-view.component.d.ts +14 -14
- package/dist/esm2022/components/chat/copilot-chat-assistant-message-buttons.component.mjs +384 -0
- package/dist/esm2022/components/chat/copilot-chat-assistant-message-renderer.component.mjs +286 -0
- package/dist/esm2022/components/chat/copilot-chat-assistant-message-toolbar.component.mjs +27 -0
- package/dist/esm2022/components/chat/copilot-chat-assistant-message.component.mjs +433 -0
- package/dist/esm2022/components/chat/copilot-chat-assistant-message.types.mjs +2 -0
- package/dist/esm2022/components/chat/copilot-chat-audio-recorder.component.mjs +202 -0
- package/dist/esm2022/components/chat/copilot-chat-buttons.component.mjs +321 -0
- package/dist/esm2022/components/chat/copilot-chat-input-defaults.mjs +38 -0
- package/dist/esm2022/components/chat/copilot-chat-input.component.mjs +666 -0
- package/dist/esm2022/components/chat/copilot-chat-input.types.mjs +10 -0
- package/dist/esm2022/components/chat/copilot-chat-message-view-cursor.component.mjs +45 -0
- package/dist/esm2022/components/chat/copilot-chat-message-view.component.mjs +296 -0
- package/dist/esm2022/components/chat/copilot-chat-message-view.types.mjs +2 -0
- package/dist/esm2022/components/chat/copilot-chat-textarea.component.mjs +188 -0
- package/dist/esm2022/components/chat/copilot-chat-tool-calls-view.component.mjs +216 -0
- package/dist/esm2022/components/chat/copilot-chat-toolbar.component.mjs +25 -0
- package/dist/esm2022/components/chat/copilot-chat-tools-menu.component.mjs +199 -0
- package/dist/esm2022/components/chat/copilot-chat-user-message-branch-navigation.component.mjs +137 -0
- package/dist/esm2022/components/chat/copilot-chat-user-message-buttons.component.mjs +207 -0
- package/dist/esm2022/components/chat/copilot-chat-user-message-renderer.component.mjs +35 -0
- package/dist/esm2022/components/chat/copilot-chat-user-message-toolbar.component.mjs +34 -0
- package/dist/esm2022/components/chat/copilot-chat-user-message.component.mjs +341 -0
- package/dist/esm2022/components/chat/copilot-chat-user-message.types.mjs +2 -0
- package/dist/esm2022/components/chat/copilot-chat-view-disclaimer.component.mjs +52 -0
- package/dist/esm2022/components/chat/copilot-chat-view-feather.component.mjs +55 -0
- package/dist/esm2022/components/chat/copilot-chat-view-handlers.service.mjs +19 -0
- package/dist/esm2022/components/chat/copilot-chat-view-input-container.component.mjs +110 -0
- package/dist/esm2022/components/chat/copilot-chat-view-scroll-to-bottom-button.component.mjs +93 -0
- package/dist/esm2022/components/chat/copilot-chat-view-scroll-view.component.mjs +443 -0
- package/dist/esm2022/components/chat/copilot-chat-view.component.mjs +479 -0
- package/dist/esm2022/components/chat/copilot-chat-view.types.mjs +2 -0
- package/dist/esm2022/components/chat/copilot-chat.component.mjs +214 -0
- package/dist/esm2022/components/copilotkit-tool-render.component.mjs +153 -0
- package/dist/esm2022/copilotkitnext-angular.mjs +5 -0
- package/dist/esm2022/core/chat-configuration/chat-configuration.providers.mjs +65 -0
- package/dist/esm2022/core/chat-configuration/chat-configuration.service.mjs +145 -0
- package/dist/esm2022/core/chat-configuration/chat-configuration.types.mjs +26 -0
- package/dist/esm2022/core/copilotkit.providers.mjs +34 -0
- package/dist/esm2022/core/copilotkit.service.mjs +430 -0
- package/dist/esm2022/core/copilotkit.types.mjs +12 -0
- package/dist/esm2022/directives/copilotkit-agent-context.directive.mjs +130 -0
- package/dist/esm2022/directives/copilotkit-agent.directive.mjs +217 -0
- package/dist/esm2022/directives/copilotkit-chat-config.directive.mjs +218 -0
- package/dist/esm2022/directives/copilotkit-config.directive.mjs +94 -0
- package/dist/esm2022/directives/copilotkit-frontend-tool.directive.mjs +130 -0
- package/dist/esm2022/directives/copilotkit-human-in-the-loop.directive.mjs +266 -0
- package/dist/esm2022/directives/stick-to-bottom.directive.mjs +181 -0
- package/dist/esm2022/index.mjs +70 -0
- package/dist/esm2022/lib/directives/tooltip.directive.mjs +211 -0
- package/dist/esm2022/lib/slots/copilot-slot.component.mjs +144 -0
- package/dist/esm2022/lib/slots/slot.types.mjs +6 -0
- package/dist/esm2022/lib/slots/slot.utils.mjs +222 -0
- package/dist/esm2022/lib/utils.mjs +10 -0
- package/dist/esm2022/services/resize-observer.service.mjs +152 -0
- package/dist/esm2022/services/scroll-position.service.mjs +124 -0
- package/dist/esm2022/types/frontend-tool.mjs +2 -0
- package/dist/esm2022/types/human-in-the-loop.mjs +2 -0
- package/dist/esm2022/utils/agent-context.utils.mjs +114 -0
- package/dist/esm2022/utils/agent.utils.mjs +204 -0
- package/dist/esm2022/utils/chat-config.utils.mjs +186 -0
- package/dist/esm2022/utils/copilotkit.utils.mjs +20 -0
- package/dist/esm2022/utils/frontend-tool.utils.mjs +228 -0
- package/dist/esm2022/utils/human-in-the-loop.utils.mjs +296 -0
- package/dist/fesm2022/copilotkitnext-angular.mjs +163 -164
- package/dist/fesm2022/copilotkitnext-angular.mjs.map +1 -1
- package/package.json +21 -18
- package/vitest.config.mts +32 -21
- package/.turbo/turbo-build.log +0 -38
- package/.turbo/turbo-check-types.log +0 -0
- package/.turbo/turbo-test.log +0 -71
- package/ng-package.json +0 -19
- package/src/components/chat/__tests__/copilot-chat-assistant-message.component.spec.ts +0 -282
- package/src/components/chat/__tests__/copilot-chat-input.component.spec.ts +0 -419
- package/src/components/chat/__tests__/copilot-chat-message-view.component.spec.ts +0 -372
- package/src/components/chat/__tests__/copilot-chat-user-message.component.spec.ts +0 -249
- package/src/components/chat/copilot-chat-assistant-message-buttons.component.ts +0 -292
- package/src/components/chat/copilot-chat-assistant-message-renderer.component.ts +0 -472
- package/src/components/chat/copilot-chat-assistant-message-toolbar.component.ts +0 -29
- package/src/components/chat/copilot-chat-assistant-message.component.ts +0 -463
- package/src/components/chat/copilot-chat-assistant-message.types.ts +0 -50
- package/src/components/chat/copilot-chat-audio-recorder.component.ts +0 -241
- package/src/components/chat/copilot-chat-buttons.component.ts +0 -308
- package/src/components/chat/copilot-chat-buttons.component.ts.bak +0 -471
- package/src/components/chat/copilot-chat-input-defaults.ts +0 -47
- package/src/components/chat/copilot-chat-input.component.ts +0 -512
- package/src/components/chat/copilot-chat-input.types.ts +0 -148
- package/src/components/chat/copilot-chat-message-view-cursor.component.ts +0 -51
- package/src/components/chat/copilot-chat-message-view.component.ts +0 -233
- package/src/components/chat/copilot-chat-message-view.types.ts +0 -39
- package/src/components/chat/copilot-chat-textarea.component.ts +0 -220
- package/src/components/chat/copilot-chat-tool-calls-view.component.ts +0 -261
- package/src/components/chat/copilot-chat-toolbar.component.ts +0 -35
- package/src/components/chat/copilot-chat-tools-menu.component.ts +0 -185
- package/src/components/chat/copilot-chat-user-message-branch-navigation.component.ts +0 -121
- package/src/components/chat/copilot-chat-user-message-buttons.component.ts +0 -170
- package/src/components/chat/copilot-chat-user-message-renderer.component.ts +0 -37
- package/src/components/chat/copilot-chat-user-message-toolbar.component.ts +0 -37
- package/src/components/chat/copilot-chat-user-message.component.ts +0 -247
- package/src/components/chat/copilot-chat-user-message.types.ts +0 -42
- package/src/components/chat/copilot-chat-view-disclaimer.component.ts +0 -51
- package/src/components/chat/copilot-chat-view-feather.component.ts +0 -47
- package/src/components/chat/copilot-chat-view-handlers.service.ts +0 -14
- package/src/components/chat/copilot-chat-view-input-container.component.ts +0 -87
- package/src/components/chat/copilot-chat-view-scroll-to-bottom-button.component.ts +0 -79
- package/src/components/chat/copilot-chat-view-scroll-view.component.ts +0 -322
- package/src/components/chat/copilot-chat-view.component.ts +0 -420
- package/src/components/chat/copilot-chat-view.types.ts +0 -52
- package/src/components/chat/copilot-chat.component.ts +0 -232
- package/src/components/copilotkit-tool-render.component.ts +0 -169
- package/src/core/__tests__/copilotkit.service.spec.ts +0 -1051
- package/src/core/__tests__/copilotkit.service.wildcard.spec.ts +0 -316
- package/src/core/chat-configuration/__tests__/chat-configuration.service.spec.ts +0 -287
- package/src/core/chat-configuration/chat-configuration.providers.ts +0 -71
- package/src/core/chat-configuration/chat-configuration.service.ts +0 -162
- package/src/core/chat-configuration/chat-configuration.types.ts +0 -57
- package/src/core/copilotkit.providers.ts +0 -59
- package/src/core/copilotkit.service.ts +0 -542
- package/src/core/copilotkit.types.ts +0 -132
- package/src/directives/__tests__/copilotkit-agent-context.directive.spec.ts +0 -384
- package/src/directives/__tests__/copilotkit-agent.directive.spec.ts +0 -253
- package/src/directives/__tests__/copilotkit-chat-config.directive.spec.ts +0 -385
- package/src/directives/__tests__/copilotkit-config.directive.spec.ts +0 -69
- package/src/directives/__tests__/copilotkit-frontend-tool-simple.directive.spec.ts +0 -60
- package/src/directives/__tests__/copilotkit-frontend-tool.directive.spec.ts +0 -108
- package/src/directives/__tests__/copilotkit-human-in-the-loop.directive.spec.ts +0 -452
- package/src/directives/copilotkit-agent-context.directive.ts +0 -138
- package/src/directives/copilotkit-agent.directive.ts +0 -225
- package/src/directives/copilotkit-chat-config.directive.ts +0 -241
- package/src/directives/copilotkit-config.directive.ts +0 -81
- package/src/directives/copilotkit-frontend-tool.directive.ts +0 -145
- package/src/directives/copilotkit-human-in-the-loop.directive.ts +0 -281
- package/src/directives/stick-to-bottom.directive.ts +0 -204
- package/src/index.ts +0 -105
- package/src/lib/directives/tooltip.directive.ts +0 -292
- package/src/lib/slots/__tests__/slot.utils.spec.ts +0 -377
- package/src/lib/slots/copilot-slot.component.ts +0 -135
- package/src/lib/slots/index.ts +0 -3
- package/src/lib/slots/slot.types.ts +0 -64
- package/src/lib/slots/slot.utils.ts +0 -289
- package/src/lib/utils.ts +0 -10
- package/src/public-api.ts +0 -1
- package/src/services/resize-observer.service.ts +0 -181
- package/src/services/scroll-position.service.ts +0 -169
- package/src/styles/globals.css +0 -266
- package/src/styles/index.css +0 -3
- package/src/test-setup.ts +0 -15
- package/src/testing/index.ts +0 -3
- package/src/testing/testing.utils.ts +0 -248
- package/src/types/frontend-tool.ts +0 -44
- package/src/types/human-in-the-loop.ts +0 -52
- package/src/utils/__tests__/agent.utils.spec.ts +0 -234
- package/src/utils/__tests__/chat-config.utils.spec.ts +0 -306
- package/src/utils/__tests__/frontend-tool-inject.spec.ts +0 -350
- package/src/utils/__tests__/frontend-tool-integration.spec.ts +0 -199
- package/src/utils/__tests__/frontend-tool.utils.spec.ts +0 -272
- package/src/utils/__tests__/human-in-the-loop.utils.spec.ts +0 -365
- package/src/utils/agent-context.utils.ts +0 -133
- package/src/utils/agent.utils.ts +0 -239
- package/src/utils/chat-config.utils.ts +0 -221
- package/src/utils/copilotkit.utils.ts +0 -20
- package/src/utils/frontend-tool.utils.ts +0 -266
- package/src/utils/human-in-the-loop.utils.ts +0 -359
- package/tsconfig.spec.json +0 -12
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { Directive, Input, Inject } from "@angular/core";
|
|
2
|
+
import { CopilotKitService } from "../core/copilotkit.service";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../core/copilotkit.service";
|
|
5
|
+
/**
|
|
6
|
+
* Directive to configure CopilotKit runtime settings declaratively in templates.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```html
|
|
10
|
+
* <div [copilotkitConfig]="{
|
|
11
|
+
* runtimeUrl: 'https://api.example.com',
|
|
12
|
+
* headers: { 'Authorization': 'Bearer token' }
|
|
13
|
+
* }">
|
|
14
|
+
* <!-- Your app content -->
|
|
15
|
+
* </div>
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* Or with individual inputs:
|
|
19
|
+
* ```html
|
|
20
|
+
* <div copilotkitConfig
|
|
21
|
+
* [runtimeUrl]="apiUrl"
|
|
22
|
+
* [headers]="authHeaders"
|
|
23
|
+
* [agents]="myAgents">
|
|
24
|
+
* <!-- Your app content -->
|
|
25
|
+
* </div>
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export class CopilotKitConfigDirective {
|
|
29
|
+
copilotkit;
|
|
30
|
+
constructor(copilotkit) {
|
|
31
|
+
this.copilotkit = copilotkit;
|
|
32
|
+
}
|
|
33
|
+
copilotkitConfig;
|
|
34
|
+
runtimeUrl;
|
|
35
|
+
headers;
|
|
36
|
+
properties;
|
|
37
|
+
agents;
|
|
38
|
+
ngOnChanges(changes) {
|
|
39
|
+
// Handle combined config object
|
|
40
|
+
if (changes['copilotkitConfig']) {
|
|
41
|
+
const config = this.copilotkitConfig;
|
|
42
|
+
if (config) {
|
|
43
|
+
if (config.runtimeUrl !== undefined) {
|
|
44
|
+
this.copilotkit.setRuntimeUrl(config.runtimeUrl);
|
|
45
|
+
}
|
|
46
|
+
if (config.headers) {
|
|
47
|
+
this.copilotkit.setHeaders(config.headers);
|
|
48
|
+
}
|
|
49
|
+
if (config.properties) {
|
|
50
|
+
this.copilotkit.setProperties(config.properties);
|
|
51
|
+
}
|
|
52
|
+
if (config.agents) {
|
|
53
|
+
this.copilotkit.setAgents(config.agents);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Handle individual inputs
|
|
58
|
+
if (changes['runtimeUrl'] && !this.copilotkitConfig) {
|
|
59
|
+
this.copilotkit.setRuntimeUrl(this.runtimeUrl);
|
|
60
|
+
}
|
|
61
|
+
if (changes['headers'] && !this.copilotkitConfig) {
|
|
62
|
+
this.copilotkit.setHeaders(this.headers || {});
|
|
63
|
+
}
|
|
64
|
+
if (changes['properties'] && !this.copilotkitConfig) {
|
|
65
|
+
this.copilotkit.setProperties(this.properties || {});
|
|
66
|
+
}
|
|
67
|
+
if (changes['agents'] && !this.copilotkitConfig) {
|
|
68
|
+
this.copilotkit.setAgents(this.agents || {});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotKitConfigDirective, deps: [{ token: CopilotKitService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
72
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: CopilotKitConfigDirective, isStandalone: true, selector: "[copilotkitConfig]", inputs: { copilotkitConfig: "copilotkitConfig", runtimeUrl: "runtimeUrl", headers: "headers", properties: "properties", agents: "agents" }, usesOnChanges: true, ngImport: i0 });
|
|
73
|
+
}
|
|
74
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotKitConfigDirective, decorators: [{
|
|
75
|
+
type: Directive,
|
|
76
|
+
args: [{
|
|
77
|
+
selector: "[copilotkitConfig]",
|
|
78
|
+
standalone: true,
|
|
79
|
+
}]
|
|
80
|
+
}], ctorParameters: () => [{ type: i1.CopilotKitService, decorators: [{
|
|
81
|
+
type: Inject,
|
|
82
|
+
args: [CopilotKitService]
|
|
83
|
+
}] }], propDecorators: { copilotkitConfig: [{
|
|
84
|
+
type: Input
|
|
85
|
+
}], runtimeUrl: [{
|
|
86
|
+
type: Input
|
|
87
|
+
}], headers: [{
|
|
88
|
+
type: Input
|
|
89
|
+
}], properties: [{
|
|
90
|
+
type: Input
|
|
91
|
+
}], agents: [{
|
|
92
|
+
type: Input
|
|
93
|
+
}] } });
|
|
94
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdGtpdC1jb25maWcuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RpcmVjdGl2ZXMvY29waWxvdGtpdC1jb25maWcuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUE0QixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7OztBQUcvRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUtILE1BQU0sT0FBTyx5QkFBeUI7SUFDb0I7SUFBeEQsWUFBd0QsVUFBNkI7UUFBN0IsZUFBVSxHQUFWLFVBQVUsQ0FBbUI7SUFBRyxDQUFDO0lBRWhGLGdCQUFnQixDQUt2QjtJQUVPLFVBQVUsQ0FBVTtJQUNwQixPQUFPLENBQTBCO0lBQ2pDLFVBQVUsQ0FBMkI7SUFDckMsTUFBTSxDQUFpQztJQUVoRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsZ0NBQWdDO1FBQ2hDLElBQUksT0FBTyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztZQUNoQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7WUFDckMsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxJQUFJLE1BQU0sQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQ3BDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDbkQsQ0FBQztnQkFDRCxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUM3QyxDQUFDO2dCQUNELElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUN0QixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ25ELENBQUM7Z0JBQ0QsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDM0MsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsMkJBQTJCO1FBQzNCLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDcEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ2pELElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUM7UUFDakQsQ0FBQztRQUNELElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDcEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLENBQUM7SUFDSCxDQUFDO3dHQWhEVSx5QkFBeUIsa0JBQ2hCLGlCQUFpQjs0RkFEMUIseUJBQXlCOzs0RkFBekIseUJBQXlCO2tCQUpyQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs7MEJBRWMsTUFBTTsyQkFBQyxpQkFBaUI7eUNBRTVCLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFPRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgSW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvcGlsb3RLaXRTZXJ2aWNlIH0gZnJvbSBcIi4uL2NvcmUvY29waWxvdGtpdC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBBYnN0cmFjdEFnZW50IH0gZnJvbSBcIkBhZy11aS9jbGllbnRcIjtcblxuLyoqXG4gKiBEaXJlY3RpdmUgdG8gY29uZmlndXJlIENvcGlsb3RLaXQgcnVudGltZSBzZXR0aW5ncyBkZWNsYXJhdGl2ZWx5IGluIHRlbXBsYXRlcy5cbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxkaXYgW2NvcGlsb3RraXRDb25maWddPVwie1xuICogICBydW50aW1lVXJsOiAnaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20nLFxuICogICBoZWFkZXJzOiB7ICdBdXRob3JpemF0aW9uJzogJ0JlYXJlciB0b2tlbicgfVxuICogfVwiPlxuICogICA8IS0tIFlvdXIgYXBwIGNvbnRlbnQgLS0+XG4gKiA8L2Rpdj5cbiAqIGBgYFxuICogXG4gKiBPciB3aXRoIGluZGl2aWR1YWwgaW5wdXRzOlxuICogYGBgaHRtbFxuICogPGRpdiBjb3BpbG90a2l0Q29uZmlnXG4gKiAgICAgIFtydW50aW1lVXJsXT1cImFwaVVybFwiXG4gKiAgICAgIFtoZWFkZXJzXT1cImF1dGhIZWFkZXJzXCJcbiAqICAgICAgW2FnZW50c109XCJteUFnZW50c1wiPlxuICogICA8IS0tIFlvdXIgYXBwIGNvbnRlbnQgLS0+XG4gKiA8L2Rpdj5cbiAqIGBgYFxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6IFwiW2NvcGlsb3RraXRDb25maWddXCIsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIENvcGlsb3RLaXRDb25maWdEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBjb25zdHJ1Y3RvcihASW5qZWN0KENvcGlsb3RLaXRTZXJ2aWNlKSBwcml2YXRlIHJlYWRvbmx5IGNvcGlsb3RraXQ6IENvcGlsb3RLaXRTZXJ2aWNlKSB7fVxuXG4gIEBJbnB1dCgpIGNvcGlsb3RraXRDb25maWc/OiB7XG4gICAgcnVudGltZVVybD86IHN0cmluZztcbiAgICBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBwcm9wZXJ0aWVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgYWdlbnRzPzogUmVjb3JkPHN0cmluZywgQWJzdHJhY3RBZ2VudD47XG4gIH07XG5cbiAgQElucHV0KCkgcnVudGltZVVybD86IHN0cmluZztcbiAgQElucHV0KCkgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIEBJbnB1dCgpIHByb3BlcnRpZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgQElucHV0KCkgYWdlbnRzPzogUmVjb3JkPHN0cmluZywgQWJzdHJhY3RBZ2VudD47XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIC8vIEhhbmRsZSBjb21iaW5lZCBjb25maWcgb2JqZWN0XG4gICAgaWYgKGNoYW5nZXNbJ2NvcGlsb3RraXRDb25maWcnXSkge1xuICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5jb3BpbG90a2l0Q29uZmlnO1xuICAgICAgaWYgKGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnLnJ1bnRpbWVVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuY29waWxvdGtpdC5zZXRSdW50aW1lVXJsKGNvbmZpZy5ydW50aW1lVXJsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnLmhlYWRlcnMpIHtcbiAgICAgICAgICB0aGlzLmNvcGlsb3RraXQuc2V0SGVhZGVycyhjb25maWcuaGVhZGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZy5wcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgdGhpcy5jb3BpbG90a2l0LnNldFByb3BlcnRpZXMoY29uZmlnLnByb3BlcnRpZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWcuYWdlbnRzKSB7XG4gICAgICAgICAgdGhpcy5jb3BpbG90a2l0LnNldEFnZW50cyhjb25maWcuYWdlbnRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSBpbmRpdmlkdWFsIGlucHV0c1xuICAgIGlmIChjaGFuZ2VzWydydW50aW1lVXJsJ10gJiYgIXRoaXMuY29waWxvdGtpdENvbmZpZykge1xuICAgICAgdGhpcy5jb3BpbG90a2l0LnNldFJ1bnRpbWVVcmwodGhpcy5ydW50aW1lVXJsKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2hlYWRlcnMnXSAmJiAhdGhpcy5jb3BpbG90a2l0Q29uZmlnKSB7XG4gICAgICB0aGlzLmNvcGlsb3RraXQuc2V0SGVhZGVycyh0aGlzLmhlYWRlcnMgfHwge30pO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1sncHJvcGVydGllcyddICYmICF0aGlzLmNvcGlsb3RraXRDb25maWcpIHtcbiAgICAgIHRoaXMuY29waWxvdGtpdC5zZXRQcm9wZXJ0aWVzKHRoaXMucHJvcGVydGllcyB8fCB7fSk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydhZ2VudHMnXSAmJiAhdGhpcy5jb3BpbG90a2l0Q29uZmlnKSB7XG4gICAgICB0aGlzLmNvcGlsb3RraXQuc2V0QWdlbnRzKHRoaXMuYWdlbnRzIHx8IHt9KTtcbiAgICB9XG4gIH1cbn0iXX0=
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { Directive, Input, isDevMode, Inject, } from "@angular/core";
|
|
2
|
+
import { CopilotKitService } from "../core/copilotkit.service";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../core/copilotkit.service";
|
|
6
|
+
export class CopilotKitFrontendToolDirective {
|
|
7
|
+
copilotkit;
|
|
8
|
+
isRegistered = false;
|
|
9
|
+
constructor(copilotkit) {
|
|
10
|
+
this.copilotkit = copilotkit;
|
|
11
|
+
}
|
|
12
|
+
name;
|
|
13
|
+
description;
|
|
14
|
+
parameters;
|
|
15
|
+
handler;
|
|
16
|
+
render;
|
|
17
|
+
followUp;
|
|
18
|
+
// Alternative: Accept a full tool object
|
|
19
|
+
tool;
|
|
20
|
+
ngOnInit() {
|
|
21
|
+
this.registerTool();
|
|
22
|
+
}
|
|
23
|
+
ngOnChanges(_changes) {
|
|
24
|
+
if (this.isRegistered) {
|
|
25
|
+
// Re-register the tool if any properties change
|
|
26
|
+
this.unregisterTool();
|
|
27
|
+
this.registerTool();
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
ngOnDestroy() {
|
|
31
|
+
this.unregisterTool();
|
|
32
|
+
}
|
|
33
|
+
registerTool() {
|
|
34
|
+
const tool = this.getTool();
|
|
35
|
+
if (!tool.name) {
|
|
36
|
+
if (isDevMode()) {
|
|
37
|
+
console.warn('CopilotKitFrontendToolDirective: "name" is required. ' +
|
|
38
|
+
'Please provide a name via [name]="toolName" or ' +
|
|
39
|
+
"[copilotkitFrontendTool]=\"{ name: 'toolName', ... }\"");
|
|
40
|
+
}
|
|
41
|
+
return; // Don't register if no name
|
|
42
|
+
}
|
|
43
|
+
// Register the tool with CopilotKit
|
|
44
|
+
this.copilotkit.copilotkit.addTool(tool);
|
|
45
|
+
// Register the render if provided
|
|
46
|
+
if (tool.render) {
|
|
47
|
+
const currentRenders = this.copilotkit.currentRenderToolCalls();
|
|
48
|
+
const renderEntry = {
|
|
49
|
+
name: tool.name,
|
|
50
|
+
args: tool.parameters || z.object({}),
|
|
51
|
+
render: tool.render,
|
|
52
|
+
};
|
|
53
|
+
// Check for duplicate
|
|
54
|
+
const existingIndex = currentRenders.findIndex((r) => r.name === tool.name);
|
|
55
|
+
if (existingIndex !== -1) {
|
|
56
|
+
if (isDevMode()) {
|
|
57
|
+
console.warn(`[CopilotKit] Tool "${tool.name}" already has a render. ` +
|
|
58
|
+
`The previous render will be replaced. ` +
|
|
59
|
+
`This may indicate a duplicate tool registration.`);
|
|
60
|
+
}
|
|
61
|
+
const updated = [...currentRenders];
|
|
62
|
+
updated[existingIndex] = renderEntry;
|
|
63
|
+
this.copilotkit.setCurrentRenderToolCalls(updated);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
this.copilotkit.setCurrentRenderToolCalls([...currentRenders, renderEntry]);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
this.isRegistered = true;
|
|
70
|
+
}
|
|
71
|
+
unregisterTool() {
|
|
72
|
+
if (!this.isRegistered)
|
|
73
|
+
return;
|
|
74
|
+
const tool = this.getTool();
|
|
75
|
+
if (tool.name) {
|
|
76
|
+
// Remove the tool
|
|
77
|
+
this.copilotkit.copilotkit.removeTool(tool.name);
|
|
78
|
+
// Remove the render if it exists
|
|
79
|
+
const currentRenders = this.copilotkit.currentRenderToolCalls();
|
|
80
|
+
const filtered = currentRenders.filter((r) => r.name !== tool.name);
|
|
81
|
+
if (filtered.length !== currentRenders.length) {
|
|
82
|
+
this.copilotkit.setCurrentRenderToolCalls(filtered);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
this.isRegistered = false;
|
|
86
|
+
}
|
|
87
|
+
getTool() {
|
|
88
|
+
// If full tool object is provided, use it
|
|
89
|
+
if (this.tool) {
|
|
90
|
+
return this.tool;
|
|
91
|
+
}
|
|
92
|
+
// Otherwise, construct from individual inputs
|
|
93
|
+
return {
|
|
94
|
+
name: this.name,
|
|
95
|
+
description: this.description,
|
|
96
|
+
parameters: this.parameters,
|
|
97
|
+
handler: this.handler,
|
|
98
|
+
render: this.render,
|
|
99
|
+
followUp: this.followUp,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotKitFrontendToolDirective, deps: [{ token: CopilotKitService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
103
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: CopilotKitFrontendToolDirective, isStandalone: true, selector: "[copilotkitFrontendTool]", inputs: { name: "name", description: "description", parameters: "parameters", handler: "handler", render: "render", followUp: "followUp", tool: ["copilotkitFrontendTool", "tool"] }, usesOnChanges: true, ngImport: i0 });
|
|
104
|
+
}
|
|
105
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotKitFrontendToolDirective, decorators: [{
|
|
106
|
+
type: Directive,
|
|
107
|
+
args: [{
|
|
108
|
+
selector: "[copilotkitFrontendTool]",
|
|
109
|
+
standalone: true,
|
|
110
|
+
}]
|
|
111
|
+
}], ctorParameters: () => [{ type: i1.CopilotKitService, decorators: [{
|
|
112
|
+
type: Inject,
|
|
113
|
+
args: [CopilotKitService]
|
|
114
|
+
}] }], propDecorators: { name: [{
|
|
115
|
+
type: Input
|
|
116
|
+
}], description: [{
|
|
117
|
+
type: Input
|
|
118
|
+
}], parameters: [{
|
|
119
|
+
type: Input
|
|
120
|
+
}], handler: [{
|
|
121
|
+
type: Input
|
|
122
|
+
}], render: [{
|
|
123
|
+
type: Input
|
|
124
|
+
}], followUp: [{
|
|
125
|
+
type: Input
|
|
126
|
+
}], tool: [{
|
|
127
|
+
type: Input,
|
|
128
|
+
args: ["copilotkitFrontendTool"]
|
|
129
|
+
}] } });
|
|
130
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdGtpdC1mcm9udGVuZC10b29sLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kaXJlY3RpdmVzL2NvcGlsb3RraXQtZnJvbnRlbmQtdG9vbC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBT0wsU0FBUyxFQUNULE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQU0vRCxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDOzs7QUFNeEIsTUFBTSxPQUFPLCtCQUErQjtJQVFJO0lBSHRDLFlBQVksR0FBRyxLQUFLLENBQUM7SUFFN0IsWUFDOEMsVUFBNkI7UUFBN0IsZUFBVSxHQUFWLFVBQVUsQ0FBbUI7SUFDeEUsQ0FBQztJQUVLLElBQUksQ0FBVTtJQUNkLFdBQVcsQ0FBVTtJQUNyQixVQUFVLENBQWtCO0lBQzVCLE9BQU8sQ0FBNkI7SUFDcEMsTUFBTSxDQUFnQztJQUN0QyxRQUFRLENBQVc7SUFFNUIseUNBQXlDO0lBQ1IsSUFBSSxDQUEwQjtJQUUvRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxXQUFXLENBQUMsUUFBdUI7UUFDakMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsZ0RBQWdEO1lBQ2hELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFTyxZQUFZO1FBQ2xCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUU1QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2YsSUFBSSxTQUFTLEVBQUUsRUFBRSxDQUFDO2dCQUNoQixPQUFPLENBQUMsSUFBSSxDQUNWLHVEQUF1RDtvQkFDckQsaURBQWlEO29CQUNqRCx3REFBd0QsQ0FDM0QsQ0FBQztZQUNKLENBQUM7WUFDRCxPQUFPLENBQUMsNEJBQTRCO1FBQ3RDLENBQUM7UUFFRCxvQ0FBb0M7UUFDcEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXpDLGtDQUFrQztRQUNsQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDaEUsTUFBTSxXQUFXLEdBQTBCO2dCQUN6QyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3JDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTthQUNwQixDQUFDO1lBRUYsc0JBQXNCO1lBQ3RCLE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUEwQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyRyxJQUFJLGFBQWEsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN6QixJQUFJLFNBQVMsRUFBRSxFQUFFLENBQUM7b0JBQ2hCLE9BQU8sQ0FBQyxJQUFJLENBQ1Ysc0JBQXNCLElBQUksQ0FBQyxJQUFJLDBCQUEwQjt3QkFDdkQsd0NBQXdDO3dCQUN4QyxrREFBa0QsQ0FDckQsQ0FBQztnQkFDSixDQUFDO2dCQUNELE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQztnQkFDcEMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHLFdBQVcsQ0FBQztnQkFDckMsSUFBSSxDQUFDLFVBQVUsQ0FBQyx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNyRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLFVBQVUsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLEdBQUcsY0FBYyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDOUUsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztJQUMzQixDQUFDO0lBRU8sY0FBYztRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVk7WUFBRSxPQUFPO1FBRS9CLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUU1QixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNkLGtCQUFrQjtZQUNsQixJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRWpELGlDQUFpQztZQUNqQyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDaEUsTUFBTSxRQUFRLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQTBCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdGLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxVQUFVLENBQUMseUJBQXlCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdEQsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBRU8sT0FBTztRQUNiLDBDQUEwQztRQUMxQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNkLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztRQUNuQixDQUFDO1FBRUQsOENBQThDO1FBQzlDLE9BQU87WUFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDN0IsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQ3hCLENBQUM7SUFDSixDQUFDO3dHQXZIVSwrQkFBK0Isa0JBUWhDLGlCQUFpQjs0RkFSaEIsK0JBQStCOzs0RkFBL0IsK0JBQStCO2tCQUozQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSwwQkFBMEI7b0JBQ3BDLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs7MEJBU0ksTUFBTTsyQkFBQyxpQkFBaUI7eUNBR2xCLElBQUk7c0JBQVosS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUcyQixJQUFJO3NCQUFwQyxLQUFLO3VCQUFDLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBUeXBlLFxuICBpc0Rldk1vZGUsXG4gIEluamVjdCxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvcGlsb3RLaXRTZXJ2aWNlIH0gZnJvbSBcIi4uL2NvcmUvY29waWxvdGtpdC5zZXJ2aWNlXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEFuZ3VsYXJGcm9udGVuZFRvb2wsXG4gIEFuZ3VsYXJUb29sQ2FsbFJlbmRlcixcbiAgVG9vbENhbGxSZW5kZXIsXG59IGZyb20gXCIuLi9jb3JlL2NvcGlsb3RraXQudHlwZXNcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogXCJbY29waWxvdGtpdEZyb250ZW5kVG9vbF1cIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgQ29waWxvdEtpdEZyb250ZW5kVG9vbERpcmVjdGl2ZTxcbiAgICBUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gID5cbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95XG57XG4gIHByaXZhdGUgaXNSZWdpc3RlcmVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChDb3BpbG90S2l0U2VydmljZSkgcHJpdmF0ZSByZWFkb25seSBjb3BpbG90a2l0OiBDb3BpbG90S2l0U2VydmljZVxuICApIHt9XG5cbiAgQElucHV0KCkgbmFtZSE6IHN0cmluZztcbiAgQElucHV0KCkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHBhcmFtZXRlcnM/OiB6LlpvZFNjaGVtYTxUPjtcbiAgQElucHV0KCkgaGFuZGxlcj86IChhcmdzOiBUKSA9PiBQcm9taXNlPGFueT47XG4gIEBJbnB1dCgpIHJlbmRlcj86IFR5cGU8YW55PiB8IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIGZvbGxvd1VwPzogYm9vbGVhbjtcblxuICAvLyBBbHRlcm5hdGl2ZTogQWNjZXB0IGEgZnVsbCB0b29sIG9iamVjdFxuICBASW5wdXQoXCJjb3BpbG90a2l0RnJvbnRlbmRUb29sXCIpIHRvb2w/OiBBbmd1bGFyRnJvbnRlbmRUb29sPFQ+O1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMucmVnaXN0ZXJUb29sKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhfY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzUmVnaXN0ZXJlZCkge1xuICAgICAgLy8gUmUtcmVnaXN0ZXIgdGhlIHRvb2wgaWYgYW55IHByb3BlcnRpZXMgY2hhbmdlXG4gICAgICB0aGlzLnVucmVnaXN0ZXJUb29sKCk7XG4gICAgICB0aGlzLnJlZ2lzdGVyVG9vbCgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMudW5yZWdpc3RlclRvb2woKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXJUb29sKCk6IHZvaWQge1xuICAgIGNvbnN0IHRvb2wgPSB0aGlzLmdldFRvb2woKTtcblxuICAgIGlmICghdG9vbC5uYW1lKSB7XG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdDb3BpbG90S2l0RnJvbnRlbmRUb29sRGlyZWN0aXZlOiBcIm5hbWVcIiBpcyByZXF1aXJlZC4gJyArXG4gICAgICAgICAgICAnUGxlYXNlIHByb3ZpZGUgYSBuYW1lIHZpYSBbbmFtZV09XCJ0b29sTmFtZVwiIG9yICcgK1xuICAgICAgICAgICAgXCJbY29waWxvdGtpdEZyb250ZW5kVG9vbF09XFxcInsgbmFtZTogJ3Rvb2xOYW1lJywgLi4uIH1cXFwiXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjsgLy8gRG9uJ3QgcmVnaXN0ZXIgaWYgbm8gbmFtZVxuICAgIH1cblxuICAgIC8vIFJlZ2lzdGVyIHRoZSB0b29sIHdpdGggQ29waWxvdEtpdFxuICAgIHRoaXMuY29waWxvdGtpdC5jb3BpbG90a2l0LmFkZFRvb2wodG9vbCk7XG5cbiAgICAvLyBSZWdpc3RlciB0aGUgcmVuZGVyIGlmIHByb3ZpZGVkXG4gICAgaWYgKHRvb2wucmVuZGVyKSB7XG4gICAgICBjb25zdCBjdXJyZW50UmVuZGVycyA9IHRoaXMuY29waWxvdGtpdC5jdXJyZW50UmVuZGVyVG9vbENhbGxzKCk7XG4gICAgICBjb25zdCByZW5kZXJFbnRyeTogQW5ndWxhclRvb2xDYWxsUmVuZGVyID0ge1xuICAgICAgICBuYW1lOiB0b29sLm5hbWUsXG4gICAgICAgIGFyZ3M6IHRvb2wucGFyYW1ldGVycyB8fCB6Lm9iamVjdCh7fSksXG4gICAgICAgIHJlbmRlcjogdG9vbC5yZW5kZXIsXG4gICAgICB9O1xuXG4gICAgICAvLyBDaGVjayBmb3IgZHVwbGljYXRlXG4gICAgICBjb25zdCBleGlzdGluZ0luZGV4ID0gY3VycmVudFJlbmRlcnMuZmluZEluZGV4KChyOiBUb29sQ2FsbFJlbmRlcjx1bmtub3duPikgPT4gci5uYW1lID09PSB0b29sLm5hbWUpO1xuICAgICAgaWYgKGV4aXN0aW5nSW5kZXggIT09IC0xKSB7XG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBbQ29waWxvdEtpdF0gVG9vbCBcIiR7dG9vbC5uYW1lfVwiIGFscmVhZHkgaGFzIGEgcmVuZGVyLiBgICtcbiAgICAgICAgICAgICAgYFRoZSBwcmV2aW91cyByZW5kZXIgd2lsbCBiZSByZXBsYWNlZC4gYCArXG4gICAgICAgICAgICAgIGBUaGlzIG1heSBpbmRpY2F0ZSBhIGR1cGxpY2F0ZSB0b29sIHJlZ2lzdHJhdGlvbi5gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cGRhdGVkID0gWy4uLmN1cnJlbnRSZW5kZXJzXTtcbiAgICAgICAgdXBkYXRlZFtleGlzdGluZ0luZGV4XSA9IHJlbmRlckVudHJ5O1xuICAgICAgICB0aGlzLmNvcGlsb3RraXQuc2V0Q3VycmVudFJlbmRlclRvb2xDYWxscyh1cGRhdGVkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29waWxvdGtpdC5zZXRDdXJyZW50UmVuZGVyVG9vbENhbGxzKFsuLi5jdXJyZW50UmVuZGVycywgcmVuZGVyRW50cnldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmlzUmVnaXN0ZXJlZCA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIHVucmVnaXN0ZXJUb29sKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1JlZ2lzdGVyZWQpIHJldHVybjtcblxuICAgIGNvbnN0IHRvb2wgPSB0aGlzLmdldFRvb2woKTtcblxuICAgIGlmICh0b29sLm5hbWUpIHtcbiAgICAgIC8vIFJlbW92ZSB0aGUgdG9vbFxuICAgICAgdGhpcy5jb3BpbG90a2l0LmNvcGlsb3RraXQucmVtb3ZlVG9vbCh0b29sLm5hbWUpO1xuXG4gICAgICAvLyBSZW1vdmUgdGhlIHJlbmRlciBpZiBpdCBleGlzdHNcbiAgICAgIGNvbnN0IGN1cnJlbnRSZW5kZXJzID0gdGhpcy5jb3BpbG90a2l0LmN1cnJlbnRSZW5kZXJUb29sQ2FsbHMoKTtcbiAgICAgIGNvbnN0IGZpbHRlcmVkID0gY3VycmVudFJlbmRlcnMuZmlsdGVyKChyOiBUb29sQ2FsbFJlbmRlcjx1bmtub3duPikgPT4gci5uYW1lICE9PSB0b29sLm5hbWUpO1xuICAgICAgaWYgKGZpbHRlcmVkLmxlbmd0aCAhPT0gY3VycmVudFJlbmRlcnMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuY29waWxvdGtpdC5zZXRDdXJyZW50UmVuZGVyVG9vbENhbGxzKGZpbHRlcmVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmlzUmVnaXN0ZXJlZCA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUb29sKCk6IEFuZ3VsYXJGcm9udGVuZFRvb2w8VD4ge1xuICAgIC8vIElmIGZ1bGwgdG9vbCBvYmplY3QgaXMgcHJvdmlkZWQsIHVzZSBpdFxuICAgIGlmICh0aGlzLnRvb2wpIHtcbiAgICAgIHJldHVybiB0aGlzLnRvb2w7XG4gICAgfVxuXG4gICAgLy8gT3RoZXJ3aXNlLCBjb25zdHJ1Y3QgZnJvbSBpbmRpdmlkdWFsIGlucHV0c1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIHBhcmFtZXRlcnM6IHRoaXMucGFyYW1ldGVycyxcbiAgICAgIGhhbmRsZXI6IHRoaXMuaGFuZGxlcixcbiAgICAgIHJlbmRlcjogdGhpcy5yZW5kZXIsXG4gICAgICBmb2xsb3dVcDogdGhpcy5mb2xsb3dVcCxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
import { Directive, Input, Output, EventEmitter, signal, isDevMode, Inject, } from "@angular/core";
|
|
2
|
+
import { CopilotKitService } from "../core/copilotkit.service";
|
|
3
|
+
import { ToolCallStatus } from "../core/copilotkit.types";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../core/copilotkit.service";
|
|
6
|
+
/**
|
|
7
|
+
* Directive for declaratively creating human-in-the-loop tools.
|
|
8
|
+
* Provides reactive outputs for status changes and response events.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```html
|
|
12
|
+
* <!-- Basic usage -->
|
|
13
|
+
* <div copilotkitHumanInTheLoop
|
|
14
|
+
* [name]="'requireApproval'"
|
|
15
|
+
* [description]="'Requires user approval'"
|
|
16
|
+
* [args]="argsSchema"
|
|
17
|
+
* [render]="approvalComponent"
|
|
18
|
+
* (statusChange)="onStatusChange($event)"
|
|
19
|
+
* (responseProvided)="onResponse($event)">
|
|
20
|
+
* </div>
|
|
21
|
+
*
|
|
22
|
+
* <!-- With template -->
|
|
23
|
+
* <div copilotkitHumanInTheLoop
|
|
24
|
+
* [name]="'requireApproval'"
|
|
25
|
+
* [description]="'Requires user approval'"
|
|
26
|
+
* [args]="argsSchema"
|
|
27
|
+
* [render]="approvalTemplate"
|
|
28
|
+
* [(status)]="approvalStatus">
|
|
29
|
+
* </div>
|
|
30
|
+
*
|
|
31
|
+
* <ng-template #approvalTemplate let-props>
|
|
32
|
+
* <div *ngIf="props.status === 'executing'">
|
|
33
|
+
* <p>{{ props.args.action }}</p>
|
|
34
|
+
* <button (click)="props.respond('approved')">Approve</button>
|
|
35
|
+
* <button (click)="props.respond('rejected')">Reject</button>
|
|
36
|
+
* </div>
|
|
37
|
+
* </ng-template>
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export class CopilotKitHumanInTheLoopDirective {
|
|
41
|
+
copilotkit;
|
|
42
|
+
toolId;
|
|
43
|
+
statusSignal = signal(ToolCallStatus.InProgress);
|
|
44
|
+
resolvePromise = null;
|
|
45
|
+
_status = ToolCallStatus.InProgress;
|
|
46
|
+
constructor(copilotkit) {
|
|
47
|
+
this.copilotkit = copilotkit;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* The name of the human-in-the-loop tool.
|
|
51
|
+
*/
|
|
52
|
+
name;
|
|
53
|
+
/**
|
|
54
|
+
* Description of what the tool does.
|
|
55
|
+
*/
|
|
56
|
+
description;
|
|
57
|
+
/**
|
|
58
|
+
* Zod schema for the tool parameters.
|
|
59
|
+
*/
|
|
60
|
+
parameters;
|
|
61
|
+
/**
|
|
62
|
+
* Component class or template to render for user interaction.
|
|
63
|
+
*/
|
|
64
|
+
render;
|
|
65
|
+
/**
|
|
66
|
+
* Whether the tool should be registered (default: true).
|
|
67
|
+
*/
|
|
68
|
+
enabled = true;
|
|
69
|
+
/**
|
|
70
|
+
* Alternative input using the directive selector.
|
|
71
|
+
* Allows: [copilotkitHumanInTheLoop]="config"
|
|
72
|
+
*/
|
|
73
|
+
set config(value) {
|
|
74
|
+
if (value) {
|
|
75
|
+
if (value.name)
|
|
76
|
+
this.name = value.name;
|
|
77
|
+
if (value.description)
|
|
78
|
+
this.description = value.description;
|
|
79
|
+
if ("parameters" in value && value.parameters)
|
|
80
|
+
this.parameters = value.parameters;
|
|
81
|
+
if ("render" in value && value.render)
|
|
82
|
+
this.render = value.render;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Emits when the status changes.
|
|
87
|
+
*/
|
|
88
|
+
statusChange = new EventEmitter();
|
|
89
|
+
/**
|
|
90
|
+
* Two-way binding for status.
|
|
91
|
+
*/
|
|
92
|
+
get status() {
|
|
93
|
+
return this._status;
|
|
94
|
+
}
|
|
95
|
+
set status(value) {
|
|
96
|
+
// Input setter for two-way binding (though typically read-only)
|
|
97
|
+
this._status = value;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Emits when a response is provided by the user.
|
|
101
|
+
*/
|
|
102
|
+
responseProvided = new EventEmitter();
|
|
103
|
+
/**
|
|
104
|
+
* Emits when the tool execution starts.
|
|
105
|
+
*/
|
|
106
|
+
executionStarted = new EventEmitter();
|
|
107
|
+
/**
|
|
108
|
+
* Emits when the tool execution completes.
|
|
109
|
+
*/
|
|
110
|
+
executionCompleted = new EventEmitter();
|
|
111
|
+
ngOnInit() {
|
|
112
|
+
if (this.enabled) {
|
|
113
|
+
this.registerTool();
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
ngOnChanges(changes) {
|
|
117
|
+
const relevantChanges = changes["name"] ||
|
|
118
|
+
changes["description"] ||
|
|
119
|
+
changes["args"] ||
|
|
120
|
+
changes["render"] ||
|
|
121
|
+
changes["enabled"];
|
|
122
|
+
if (relevantChanges && !relevantChanges.firstChange) {
|
|
123
|
+
// Re-register the tool with new configuration
|
|
124
|
+
this.unregisterTool();
|
|
125
|
+
if (this.enabled) {
|
|
126
|
+
this.registerTool();
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
ngOnDestroy() {
|
|
131
|
+
this.unregisterTool();
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Programmatically trigger a response.
|
|
135
|
+
* Useful when the directive is used as a controller.
|
|
136
|
+
*/
|
|
137
|
+
respond(result) {
|
|
138
|
+
this.handleResponse(result);
|
|
139
|
+
}
|
|
140
|
+
registerTool() {
|
|
141
|
+
if (!this.name || !this.description || !this.parameters || !this.render) {
|
|
142
|
+
if (isDevMode()) {
|
|
143
|
+
throw new Error("CopilotKitHumanInTheLoopDirective: Missing required inputs. " +
|
|
144
|
+
"Required: name, description, parameters, and render.");
|
|
145
|
+
}
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
// Create handler that returns a Promise
|
|
149
|
+
const handler = async (args) => {
|
|
150
|
+
return new Promise((resolve) => {
|
|
151
|
+
this.updateStatus(ToolCallStatus.Executing);
|
|
152
|
+
this.resolvePromise = resolve;
|
|
153
|
+
this.executionStarted.emit(args);
|
|
154
|
+
});
|
|
155
|
+
};
|
|
156
|
+
// Create the frontend tool with enhanced render
|
|
157
|
+
const frontendTool = {
|
|
158
|
+
name: this.name,
|
|
159
|
+
description: this.description,
|
|
160
|
+
parameters: this.parameters,
|
|
161
|
+
handler,
|
|
162
|
+
render: this.render, // Will be enhanced by the render component
|
|
163
|
+
};
|
|
164
|
+
// Add the tool (returns void, so we use the tool name as ID)
|
|
165
|
+
this.copilotkit.copilotkit.addTool(frontendTool);
|
|
166
|
+
this.toolId = this.name;
|
|
167
|
+
// Register the render with respond capability
|
|
168
|
+
this.copilotkit.registerToolRender(this.name, {
|
|
169
|
+
name: this.name,
|
|
170
|
+
args: this.parameters,
|
|
171
|
+
render: this.createEnhancedRender(),
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
unregisterTool() {
|
|
175
|
+
if (this.toolId) {
|
|
176
|
+
this.copilotkit.copilotkit.removeTool(this.toolId);
|
|
177
|
+
this.copilotkit.unregisterToolRender(this.name);
|
|
178
|
+
this.toolId = undefined;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
createEnhancedRender() {
|
|
182
|
+
// If it's a template, we need to wrap it with our respond function
|
|
183
|
+
// This is handled by returning a special marker that the render component
|
|
184
|
+
// will recognize and enhance with the respond function
|
|
185
|
+
// Store reference to this directive instance for the render component
|
|
186
|
+
this.render.__humanInTheLoopDirective = this;
|
|
187
|
+
this.render.__humanInTheLoopStatus = this.statusSignal;
|
|
188
|
+
return this.render;
|
|
189
|
+
}
|
|
190
|
+
handleResponse(result) {
|
|
191
|
+
if (this.resolvePromise) {
|
|
192
|
+
this.resolvePromise(result);
|
|
193
|
+
this.updateStatus(ToolCallStatus.Complete);
|
|
194
|
+
this.resolvePromise = null;
|
|
195
|
+
this.responseProvided.emit(result);
|
|
196
|
+
this.executionCompleted.emit(result);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
updateStatus(status) {
|
|
200
|
+
this._status = status;
|
|
201
|
+
this.statusSignal.set(status);
|
|
202
|
+
this.statusChange.emit(status);
|
|
203
|
+
}
|
|
204
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotKitHumanInTheLoopDirective, deps: [{ token: CopilotKitService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
205
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: CopilotKitHumanInTheLoopDirective, isStandalone: true, selector: "[copilotkitHumanInTheLoop]", inputs: { name: "name", description: "description", parameters: "parameters", render: "render", enabled: "enabled", config: ["copilotkitHumanInTheLoop", "config"], status: "status" }, outputs: { statusChange: "statusChange", responseProvided: "responseProvided", executionStarted: "executionStarted", executionCompleted: "executionCompleted" }, usesOnChanges: true, ngImport: i0 });
|
|
206
|
+
}
|
|
207
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotKitHumanInTheLoopDirective, decorators: [{
|
|
208
|
+
type: Directive,
|
|
209
|
+
args: [{
|
|
210
|
+
selector: "[copilotkitHumanInTheLoop]",
|
|
211
|
+
standalone: true,
|
|
212
|
+
}]
|
|
213
|
+
}], ctorParameters: () => [{ type: i1.CopilotKitService, decorators: [{
|
|
214
|
+
type: Inject,
|
|
215
|
+
args: [CopilotKitService]
|
|
216
|
+
}] }], propDecorators: { name: [{
|
|
217
|
+
type: Input
|
|
218
|
+
}], description: [{
|
|
219
|
+
type: Input
|
|
220
|
+
}], parameters: [{
|
|
221
|
+
type: Input
|
|
222
|
+
}], render: [{
|
|
223
|
+
type: Input
|
|
224
|
+
}], enabled: [{
|
|
225
|
+
type: Input
|
|
226
|
+
}], config: [{
|
|
227
|
+
type: Input,
|
|
228
|
+
args: ["copilotkitHumanInTheLoop"]
|
|
229
|
+
}], statusChange: [{
|
|
230
|
+
type: Output
|
|
231
|
+
}], status: [{
|
|
232
|
+
type: Input
|
|
233
|
+
}], responseProvided: [{
|
|
234
|
+
type: Output
|
|
235
|
+
}], executionStarted: [{
|
|
236
|
+
type: Output
|
|
237
|
+
}], executionCompleted: [{
|
|
238
|
+
type: Output
|
|
239
|
+
}] } });
|
|
240
|
+
/**
|
|
241
|
+
* Helper directive to provide respond function in templates.
|
|
242
|
+
* This would be used internally by the tool render component.
|
|
243
|
+
*
|
|
244
|
+
* @internal
|
|
245
|
+
*/
|
|
246
|
+
export class CopilotKitHumanInTheLoopRespondDirective {
|
|
247
|
+
copilotkitHumanInTheLoopRespond;
|
|
248
|
+
/**
|
|
249
|
+
* Convenience method for templates to call respond.
|
|
250
|
+
*/
|
|
251
|
+
respond(result) {
|
|
252
|
+
this.copilotkitHumanInTheLoopRespond?.(result);
|
|
253
|
+
}
|
|
254
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotKitHumanInTheLoopRespondDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
255
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: CopilotKitHumanInTheLoopRespondDirective, isStandalone: true, selector: "[copilotkitHumanInTheLoopRespond]", inputs: { copilotkitHumanInTheLoopRespond: "copilotkitHumanInTheLoopRespond" }, ngImport: i0 });
|
|
256
|
+
}
|
|
257
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotKitHumanInTheLoopRespondDirective, decorators: [{
|
|
258
|
+
type: Directive,
|
|
259
|
+
args: [{
|
|
260
|
+
selector: "[copilotkitHumanInTheLoopRespond]",
|
|
261
|
+
standalone: true,
|
|
262
|
+
}]
|
|
263
|
+
}], propDecorators: { copilotkitHumanInTheLoopRespond: [{
|
|
264
|
+
type: Input
|
|
265
|
+
}] } });
|
|
266
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdGtpdC1odW1hbi1pbi10aGUtbG9vcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGlyZWN0aXZlcy9jb3BpbG90a2l0LWh1bWFuLWluLXRoZS1sb29wLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQU9aLE1BQU0sRUFDTixTQUFTLEVBQ1QsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBTS9ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7O0FBRzFEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQ0c7QUFLSCxNQUFNLE9BQU8saUNBQWlDO0lBV0U7SUFOdEMsTUFBTSxDQUFVO0lBQ2hCLFlBQVksR0FBRyxNQUFNLENBQWlCLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNqRSxjQUFjLEdBQXVDLElBQUksQ0FBQztJQUMxRCxPQUFPLEdBQW1CLGNBQWMsQ0FBQyxVQUFVLENBQUM7SUFFNUQsWUFDOEMsVUFBNkI7UUFBN0IsZUFBVSxHQUFWLFVBQVUsQ0FBbUI7SUFDeEUsQ0FBQztJQUVKOztPQUVHO0lBQ00sSUFBSSxDQUFVO0lBRXZCOztPQUVHO0lBQ00sV0FBVyxDQUFVO0lBRTlCOztPQUVHO0lBQ00sVUFBVSxDQUFrQjtJQUVyQzs7T0FFRztJQUNNLE1BQU0sQ0FBbUQ7SUFFbEU7O09BRUc7SUFDTSxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBRXhCOzs7T0FHRztJQUNILElBQ0ksTUFBTSxDQUFDLEtBQW9EO1FBQzdELElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixJQUFJLEtBQUssQ0FBQyxJQUFJO2dCQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxD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QUtHLGtCQUFrQjtzQkFBM0IsTUFBTTs7QUFtSFQ7Ozs7O0dBS0c7QUFLSCxNQUFNLE9BQU8sd0NBQXdDO0lBQzFDLCtCQUErQixDQUFzQztJQUU5RTs7T0FFRztJQUNILE9BQU8sQ0FBQyxNQUFlO1FBQ3JCLElBQUksQ0FBQywrQkFBK0IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pELENBQUM7d0dBUlUsd0NBQXdDOzRGQUF4Qyx3Q0FBd0M7OzRGQUF4Qyx3Q0FBd0M7a0JBSnBELFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG1DQUFtQztvQkFDN0MsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOzhCQUVVLCtCQUErQjtzQkFBdkMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPbkluaXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVHlwZSxcbiAgc2lnbmFsLFxuICBpc0Rldk1vZGUsXG4gIEluamVjdCxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvcGlsb3RLaXRTZXJ2aWNlIH0gZnJvbSBcIi4uL2NvcmUvY29waWxvdGtpdC5zZXJ2aWNlXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEFuZ3VsYXJIdW1hbkluVGhlTG9vcCxcbiAgSHVtYW5JblRoZUxvb3BQcm9wcyxcbiAgQW5ndWxhckZyb250ZW5kVG9vbCxcbn0gZnJvbSBcIi4uL2NvcmUvY29waWxvdGtpdC50eXBlc1wiO1xuaW1wb3J0IHsgVG9vbENhbGxTdGF0dXMgfSBmcm9tIFwiLi4vY29yZS9jb3BpbG90a2l0LnR5cGVzXCI7XG5pbXBvcnQgKiBhcyB6IGZyb20gXCJ6b2RcIjtcblxuLyoqXG4gKiBEaXJlY3RpdmUgZm9yIGRlY2xhcmF0aXZlbHkgY3JlYXRpbmcgaHVtYW4taW4tdGhlLWxvb3AgdG9vbHMuXG4gKiBQcm92aWRlcyByZWFjdGl2ZSBvdXRwdXRzIGZvciBzdGF0dXMgY2hhbmdlcyBhbmQgcmVzcG9uc2UgZXZlbnRzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8IS0tIEJhc2ljIHVzYWdlIC0tPlxuICogPGRpdiBjb3BpbG90a2l0SHVtYW5JblRoZUxvb3BcbiAqICAgICAgW25hbWVdPVwiJ3JlcXVpcmVBcHByb3ZhbCdcIlxuICogICAgICBbZGVzY3JpcHRpb25dPVwiJ1JlcXVpcmVzIHVzZXIgYXBwcm92YWwnXCJcbiAqICAgICAgW2FyZ3NdPVwiYXJnc1NjaGVtYVwiXG4gKiAgICAgIFtyZW5kZXJdPVwiYXBwcm92YWxDb21wb25lbnRcIlxuICogICAgICAoc3RhdHVzQ2hhbmdlKT1cIm9uU3RhdHVzQ2hhbmdlKCRldmVudClcIlxuICogICAgICAocmVzcG9uc2VQcm92aWRlZCk9XCJvblJlc3BvbnNlKCRldmVudClcIj5cbiAqIDwvZGl2PlxuICpcbiAqIDwhLS0gV2l0aCB0ZW1wbGF0ZSAtLT5cbiAqIDxkaXYgY29waWxvdGtpdEh1bWFuSW5UaGVMb29wXG4gKiAgICAgIFtuYW1lXT1cIidyZXF1aXJlQXBwcm92YWwnXCJcbiAqICAgICAgW2Rlc2NyaXB0aW9uXT1cIidSZXF1aXJlcyB1c2VyIGFwcHJvdmFsJ1wiXG4gKiAgICAgIFthcmdzXT1cImFyZ3NTY2hlbWFcIlxuICogICAgICBbcmVuZGVyXT1cImFwcHJvdmFsVGVtcGxhdGVcIlxuICogICAgICBbKHN0YXR1cyldPVwiYXBwcm92YWxTdGF0dXNcIj5cbiAqIDwvZGl2PlxuICpcbiAqIDxuZy10ZW1wbGF0ZSAjYXBwcm92YWxUZW1wbGF0ZSBsZXQtcHJvcHM+XG4gKiAgIDxkaXYgKm5nSWY9XCJwcm9wcy5zdGF0dXMgPT09ICdleGVjdXRpbmcnXCI+XG4gKiAgICAgPHA+e3sgcHJvcHMuYXJncy5hY3Rpb24gfX08L3A+XG4gKiAgICAgPGJ1dHRvbiAoY2xpY2spPVwicHJvcHMucmVzcG9uZCgnYXBwcm92ZWQnKVwiPkFwcHJvdmU8L2J1dHRvbj5cbiAqICAgICA8YnV0dG9uIChjbGljayk9XCJwcm9wcy5yZXNwb25kKCdyZWplY3RlZCcpXCI+UmVqZWN0PC9idXR0b24+XG4gKiAgIDwvZGl2PlxuICogPC9uZy10ZW1wbGF0ZT5cbiAqIGBgYFxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6IFwiW2NvcGlsb3RraXRIdW1hbkluVGhlTG9vcF1cIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgQ29waWxvdEtpdEh1bWFuSW5UaGVMb29wRGlyZWN0aXZlPFxuICAgIFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gUmVjb3JkPHN0cmluZywgYW55PixcbiAgPlxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3lcbntcbiAgcHJpdmF0ZSB0b29sSWQ/OiBzdHJpbmc7XG4gIHByaXZhdGUgc3RhdHVzU2lnbmFsID0gc2lnbmFsPFRvb2xDYWxsU3RhdHVzPihUb29sQ2FsbFN0YXR1cy5JblByb2dyZXNzKTtcbiAgcHJpdmF0ZSByZXNvbHZlUHJvbWlzZTogKChyZXN1bHQ6IHVua25vd24pID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX3N0YXR1czogVG9vbENhbGxTdGF0dXMgPSBUb29sQ2FsbFN0YXR1cy5JblByb2dyZXNzO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoQ29waWxvdEtpdFNlcnZpY2UpIHByaXZhdGUgcmVhZG9ubHkgY29waWxvdGtpdDogQ29waWxvdEtpdFNlcnZpY2VcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgaHVtYW4taW4tdGhlLWxvb3AgdG9vbC5cbiAgICovXG4gIEBJbnB1dCgpIG5hbWUhOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERlc2NyaXB0aW9uIG9mIHdoYXQgdGhlIHRvb2wgZG9lcy5cbiAgICovXG4gIEBJbnB1dCgpIGRlc2NyaXB0aW9uITogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBab2Qgc2NoZW1hIGZvciB0aGUgdG9vbCBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgQElucHV0KCkgcGFyYW1ldGVycyE6IHouWm9kU2NoZW1hPFQ+O1xuXG4gIC8qKlxuICAgKiBDb21wb25lbnQgY2xhc3Mgb3IgdGVtcGxhdGUgdG8gcmVuZGVyIGZvciB1c2VyIGludGVyYWN0aW9uLlxuICAgKi9cbiAgQElucHV0KCkgcmVuZGVyITogVHlwZTxhbnk+IHwgVGVtcGxhdGVSZWY8SHVtYW5JblRoZUxvb3BQcm9wczxUPj47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHRvb2wgc2hvdWxkIGJlIHJlZ2lzdGVyZWQgKGRlZmF1bHQ6IHRydWUpLlxuICAgKi9cbiAgQElucHV0KCkgZW5hYmxlZCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEFsdGVybmF0aXZlIGlucHV0IHVzaW5nIHRoZSBkaXJlY3RpdmUgc2VsZWN0b3IuXG4gICAqIEFsbG93czogW2NvcGlsb3RraXRIdW1hbkluVGhlTG9vcF09XCJjb25maWdcIlxuICAgKi9cbiAgQElucHV0KFwiY29waWxvdGtpdEh1bWFuSW5UaGVMb29wXCIpXG4gIHNldCBjb25maWcodmFsdWU6IFBhcnRpYWw8QW5ndWxhckh1bWFuSW5UaGVMb29wPFQ+PiB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgaWYgKHZhbHVlLm5hbWUpIHRoaXMubmFtZSA9IHZhbHVlLm5hbWU7XG4gICAgICBpZiAodmFsdWUuZGVzY3JpcHRpb24pIHRoaXMuZGVzY3JpcHRpb24gPSB2YWx1ZS5kZXNjcmlwdGlvbjtcbiAgICAgIGlmIChcInBhcmFtZXRlcnNcIiBpbiB2YWx1ZSAmJiB2YWx1ZS5wYXJhbWV0ZXJzKVxuICAgICAgICB0aGlzLnBhcmFtZXRlcnMgPSB2YWx1ZS5wYXJhbWV0ZXJzIGFzIHouWm9kU2NoZW1hPFQ+O1xuICAgICAgaWYgKFwicmVuZGVyXCIgaW4gdmFsdWUgJiYgdmFsdWUucmVuZGVyKSB0aGlzLnJlbmRlciA9IHZhbHVlLnJlbmRlcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgd2hlbiB0aGUgc3RhdHVzIGNoYW5nZXMuXG4gICAqL1xuICBAT3V0cHV0KCkgc3RhdHVzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUb29sQ2FsbFN0YXR1cz4oKTtcblxuICAvKipcbiAgICogVHdvLXdheSBiaW5kaW5nIGZvciBzdGF0dXMuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgc3RhdHVzKCk6IFRvb2xDYWxsU3RhdHVzIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdHVzO1xuICB9XG4gIHNldCBzdGF0dXModmFsdWU6IFRvb2xDYWxsU3RhdHVzKSB7XG4gICAgLy8gSW5wdXQgc2V0dGVyIGZvciB0d28td2F5IGJpbmRpbmcgKHRob3VnaCB0eXBpY2FsbHkgcmVhZC1vbmx5KVxuICAgIHRoaXMuX3N0YXR1cyA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIHdoZW4gYSByZXNwb25zZSBpcyBwcm92aWRlZCBieSB0aGUgdXNlci5cbiAgICovXG4gIEBPdXRwdXQoKSByZXNwb25zZVByb3ZpZGVkID0gbmV3IEV2ZW50RW1pdHRlcjx1bmtub3duPigpO1xuXG4gIC8qKlxuICAgKiBFbWl0cyB3aGVuIHRoZSB0b29sIGV4ZWN1dGlvbiBzdGFydHMuXG4gICAqL1xuICBAT3V0cHV0KCkgZXhlY3V0aW9uU3RhcnRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBFbWl0cyB3aGVuIHRoZSB0b29sIGV4ZWN1dGlvbiBjb21wbGV0ZXMuXG4gICAqL1xuICBAT3V0cHV0KCkgZXhlY3V0aW9uQ29tcGxldGVkID0gbmV3IEV2ZW50RW1pdHRlcjx1bmtub3duPigpO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVuYWJsZWQpIHtcbiAgICAgIHRoaXMucmVnaXN0ZXJUb29sKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGNvbnN0IHJlbGV2YW50Q2hhbmdlcyA9XG4gICAgICBjaGFuZ2VzW1wibmFtZVwiXSB8fFxuICAgICAgY2hhbmdlc1tcImRlc2NyaXB0aW9uXCJdIHx8XG4gICAgICBjaGFuZ2VzW1wiYXJnc1wiXSB8fFxuICAgICAgY2hhbmdlc1tcInJlbmRlclwiXSB8fFxuICAgICAgY2hhbmdlc1tcImVuYWJsZWRcIl07XG5cbiAgICBpZiAocmVsZXZhbnRDaGFuZ2VzICYmICFyZWxldmFudENoYW5nZXMuZmlyc3RDaGFuZ2UpIHtcbiAgICAgIC8vIFJlLXJlZ2lzdGVyIHRoZSB0b29sIHdpdGggbmV3IGNvbmZpZ3VyYXRpb25cbiAgICAgIHRoaXMudW5yZWdpc3RlclRvb2woKTtcbiAgICAgIGlmICh0aGlzLmVuYWJsZWQpIHtcbiAgICAgICAgdGhpcy5yZWdpc3RlclRvb2woKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnVucmVnaXN0ZXJUb29sKCk7XG4gIH1cblxuICAvKipcbiAgICogUHJvZ3JhbW1hdGljYWxseSB0cmlnZ2VyIGEgcmVzcG9uc2UuXG4gICAqIFVzZWZ1bCB3aGVuIHRoZSBkaXJlY3RpdmUgaXMgdXNlZCBhcyBhIGNvbnRyb2xsZXIuXG4gICAqL1xuICByZXNwb25kKHJlc3VsdDogdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlUmVzcG9uc2UocmVzdWx0KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXJUb29sKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5uYW1lIHx8ICF0aGlzLmRlc2NyaXB0aW9uIHx8ICF0aGlzLnBhcmFtZXRlcnMgfHwgIXRoaXMucmVuZGVyKSB7XG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiQ29waWxvdEtpdEh1bWFuSW5UaGVMb29wRGlyZWN0aXZlOiBNaXNzaW5nIHJlcXVpcmVkIGlucHV0cy4gXCIgK1xuICAgICAgICAgICAgXCJSZXF1aXJlZDogbmFtZSwgZGVzY3JpcHRpb24sIHBhcmFtZXRlcnMsIGFuZCByZW5kZXIuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgaGFuZGxlciB0aGF0IHJldHVybnMgYSBQcm9taXNlXG4gICAgY29uc3QgaGFuZGxlciA9IGFzeW5jIChhcmdzOiBUKTogUHJvbWlzZTx1bmtub3duPiA9PiB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVTdGF0dXMoVG9vbENhbGxTdGF0dXMuRXhlY3V0aW5nKTtcbiAgICAgICAgdGhpcy5yZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gICAgICAgIHRoaXMuZXhlY3V0aW9uU3RhcnRlZC5lbWl0KGFyZ3MpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vIENyZWF0ZSB0aGUgZnJvbnRlbmQgdG9vbCB3aXRoIGVuaGFuY2VkIHJlbmRlclxuICAgIGNvbnN0IGZyb250ZW5kVG9vbDogQW5ndWxhckZyb250ZW5kVG9vbDxUPiA9IHtcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgcGFyYW1ldGVyczogdGhpcy5wYXJhbWV0ZXJzLFxuICAgICAgaGFuZGxlcixcbiAgICAgIHJlbmRlcjogdGhpcy5yZW5kZXIsIC8vIFdpbGwgYmUgZW5oYW5jZWQgYnkgdGhlIHJlbmRlciBjb21wb25lbnRcbiAgICB9O1xuXG4gICAgLy8gQWRkIHRoZSB0b29sIChyZXR1cm5zIHZvaWQsIHNvIHdlIHVzZSB0aGUgdG9vbCBuYW1lIGFzIElEKVxuICAgIHRoaXMuY29waWxvdGtpdC5jb3BpbG90a2l0LmFkZFRvb2woZnJvbnRlbmRUb29sKTtcbiAgICB0aGlzLnRvb2xJZCA9IHRoaXMubmFtZTtcblxuICAgIC8vIFJlZ2lzdGVyIHRoZSByZW5kZXIgd2l0aCByZXNwb25kIGNhcGFiaWxpdHlcbiAgICB0aGlzLmNvcGlsb3RraXQucmVnaXN0ZXJUb29sUmVuZGVyKHRoaXMubmFtZSwge1xuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgYXJnczogdGhpcy5wYXJhbWV0ZXJzLFxuICAgICAgcmVuZGVyOiB0aGlzLmNyZWF0ZUVuaGFuY2VkUmVuZGVyKCksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVucmVnaXN0ZXJUb29sKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRvb2xJZCkge1xuICAgICAgdGhpcy5jb3BpbG90a2l0LmNvcGlsb3RraXQucmVtb3ZlVG9vbCh0aGlzLnRvb2xJZCk7XG4gICAgICB0aGlzLmNvcGlsb3RraXQudW5yZWdpc3RlclRvb2xSZW5kZXIodGhpcy5uYW1lKTtcbiAgICAgIHRoaXMudG9vbElkID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRW5oYW5jZWRSZW5kZXIoKTogVHlwZTxhbnk+IHwgVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgLy8gSWYgaXQncyBhIHRlbXBsYXRlLCB3ZSBuZWVkIHRvIHdyYXAgaXQgd2l0aCBvdXIgcmVzcG9uZCBmdW5jdGlvblxuICAgIC8vIFRoaXMgaXMgaGFuZGxlZCBieSByZXR1cm5pbmcgYSBzcGVjaWFsIG1hcmtlciB0aGF0IHRoZSByZW5kZXIgY29tcG9uZW50XG4gICAgLy8gd2lsbCByZWNvZ25pemUgYW5kIGVuaGFuY2Ugd2l0aCB0aGUgcmVzcG9uZCBmdW5jdGlvblxuXG4gICAgLy8gU3RvcmUgcmVmZXJlbmNlIHRvIHRoaXMgZGlyZWN0aXZlIGluc3RhbmNlIGZvciB0aGUgcmVuZGVyIGNvbXBvbmVudFxuICAgICh0aGlzLnJlbmRlciBhcyBhbnkpLl9faHVtYW5JblRoZUxvb3BEaXJlY3RpdmUgPSB0aGlzO1xuICAgICh0aGlzLnJlbmRlciBhcyBhbnkpLl9faHVtYW5JblRoZUxvb3BTdGF0dXMgPSB0aGlzLnN0YXR1c1NpZ25hbDtcblxuICAgIHJldHVybiB0aGlzLnJlbmRlcjtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUmVzcG9uc2UocmVzdWx0OiB1bmtub3duKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVzb2x2ZVByb21pc2UpIHtcbiAgICAgIHRoaXMucmVzb2x2ZVByb21pc2UocmVzdWx0KTtcbiAgICAgIHRoaXMudXBkYXRlU3RhdHVzKFRvb2xDYWxsU3RhdHVzLkNvbXBsZXRlKTtcbiAgICAgIHRoaXMucmVzb2x2ZVByb21pc2UgPSBudWxsO1xuICAgICAgdGhpcy5yZXNwb25zZVByb3ZpZGVkLmVtaXQocmVzdWx0KTtcbiAgICAgIHRoaXMuZXhlY3V0aW9uQ29tcGxldGVkLmVtaXQocmVzdWx0KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0YXR1cyhzdGF0dXM6IFRvb2xDYWxsU3RhdHVzKTogdm9pZCB7XG4gICAgdGhpcy5fc3RhdHVzID0gc3RhdHVzO1xuICAgIHRoaXMuc3RhdHVzU2lnbmFsLnNldChzdGF0dXMpO1xuICAgIHRoaXMuc3RhdHVzQ2hhbmdlLmVtaXQoc3RhdHVzKTtcbiAgfVxufVxuXG4vKipcbiAqIEhlbHBlciBkaXJlY3RpdmUgdG8gcHJvdmlkZSByZXNwb25kIGZ1bmN0aW9uIGluIHRlbXBsYXRlcy5cbiAqIFRoaXMgd291bGQgYmUgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSB0b29sIHJlbmRlciBjb21wb25lbnQuXG4gKlxuICogQGludGVybmFsXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogXCJbY29waWxvdGtpdEh1bWFuSW5UaGVMb29wUmVzcG9uZF1cIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgQ29waWxvdEtpdEh1bWFuSW5UaGVMb29wUmVzcG9uZERpcmVjdGl2ZSB7XG4gIEBJbnB1dCgpIGNvcGlsb3RraXRIdW1hbkluVGhlTG9vcFJlc3BvbmQ/OiAocmVzdWx0OiB1bmtub3duKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgZm9yIHRlbXBsYXRlcyB0byBjYWxsIHJlc3BvbmQuXG4gICAqL1xuICByZXNwb25kKHJlc3VsdDogdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMuY29waWxvdGtpdEh1bWFuSW5UaGVMb29wUmVzcG9uZD8uKHJlc3VsdCk7XG4gIH1cbn1cbiJdfQ==
|