@copilotkitnext/angular 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/.turbo/turbo-build.log +39 -0
  2. package/.turbo/turbo-check-types.log +0 -0
  3. package/.turbo/turbo-test.log +71 -0
  4. package/LICENSE +10 -0
  5. package/README-agent-context.md +310 -0
  6. package/dist/LICENSE +10 -0
  7. package/dist/components/chat/copilot-chat-assistant-message-buttons.component.d.ts +75 -0
  8. package/dist/components/chat/copilot-chat-assistant-message-renderer.component.d.ts +31 -0
  9. package/dist/components/chat/copilot-chat-assistant-message-toolbar.component.d.ts +8 -0
  10. package/dist/components/chat/copilot-chat-assistant-message.component.d.ts +131 -0
  11. package/dist/components/chat/copilot-chat-assistant-message.types.d.ts +31 -0
  12. package/dist/components/chat/copilot-chat-audio-recorder.component.d.ts +40 -0
  13. package/dist/components/chat/copilot-chat-buttons.component.d.ts +66 -0
  14. package/dist/components/chat/copilot-chat-input-defaults.d.ts +37 -0
  15. package/dist/components/chat/copilot-chat-input.component.d.ts +133 -0
  16. package/dist/components/chat/copilot-chat-input.types.d.ts +129 -0
  17. package/dist/components/chat/copilot-chat-message-view-cursor.component.d.ts +15 -0
  18. package/dist/components/chat/copilot-chat-message-view.component.d.ts +293 -0
  19. package/dist/components/chat/copilot-chat-message-view.types.d.ts +24 -0
  20. package/dist/components/chat/copilot-chat-textarea.component.d.ts +45 -0
  21. package/dist/components/chat/copilot-chat-tool-calls-view.component.d.ts +35 -0
  22. package/dist/components/chat/copilot-chat-toolbar.component.d.ts +8 -0
  23. package/dist/components/chat/copilot-chat-tools-menu.component.d.ts +20 -0
  24. package/dist/components/chat/copilot-chat-user-message-branch-navigation.component.d.ts +23 -0
  25. package/dist/components/chat/copilot-chat-user-message-buttons.component.d.ts +39 -0
  26. package/dist/components/chat/copilot-chat-user-message-renderer.component.d.ts +9 -0
  27. package/dist/components/chat/copilot-chat-user-message-toolbar.component.d.ts +8 -0
  28. package/dist/components/chat/copilot-chat-user-message.component.d.ts +55 -0
  29. package/dist/components/chat/copilot-chat-user-message.types.d.ts +33 -0
  30. package/dist/components/chat/copilot-chat-view-disclaimer.component.d.ts +15 -0
  31. package/dist/components/chat/copilot-chat-view-feather.component.d.ts +15 -0
  32. package/dist/components/chat/copilot-chat-view-handlers.service.d.ts +11 -0
  33. package/dist/components/chat/copilot-chat-view-input-container.component.d.ts +23 -0
  34. package/dist/components/chat/copilot-chat-view-scroll-to-bottom-button.component.d.ts +17 -0
  35. package/dist/components/chat/copilot-chat-view-scroll-view.component.d.ts +84 -0
  36. package/dist/components/chat/copilot-chat-view.component.d.ts +205 -0
  37. package/dist/components/chat/copilot-chat-view.types.d.ts +42 -0
  38. package/dist/components/chat/copilot-chat.component.d.ts +37 -0
  39. package/dist/components/copilotkit-tool-render.component.d.ts +25 -0
  40. package/dist/core/chat-configuration/chat-configuration.providers.d.ts +54 -0
  41. package/dist/core/chat-configuration/chat-configuration.service.d.ts +75 -0
  42. package/dist/core/chat-configuration/chat-configuration.types.d.ts +27 -0
  43. package/dist/core/copilotkit.providers.d.ts +13 -0
  44. package/dist/core/copilotkit.service.d.ts +119 -0
  45. package/dist/core/copilotkit.types.d.ts +83 -0
  46. package/dist/directives/copilotkit-agent-context.directive.d.ts +68 -0
  47. package/dist/directives/copilotkit-agent.directive.d.ts +106 -0
  48. package/dist/directives/copilotkit-chat-config.directive.d.ts +84 -0
  49. package/dist/directives/copilotkit-config.directive.d.ts +44 -0
  50. package/dist/directives/copilotkit-frontend-tool.directive.d.ts +25 -0
  51. package/dist/directives/copilotkit-human-in-the-loop.directive.d.ts +124 -0
  52. package/dist/directives/stick-to-bottom.directive.d.ts +62 -0
  53. package/dist/fesm2022/copilotkitnext-angular.mjs +9314 -0
  54. package/dist/fesm2022/copilotkitnext-angular.mjs.map +1 -0
  55. package/dist/index.d.ts +55 -0
  56. package/dist/lib/directives/tooltip.directive.d.ts +33 -0
  57. package/dist/lib/slots/copilot-slot.component.d.ts +34 -0
  58. package/dist/lib/slots/slot.types.d.ts +55 -0
  59. package/dist/lib/slots/slot.utils.d.ts +108 -0
  60. package/dist/lib/utils.d.ts +6 -0
  61. package/dist/services/resize-observer.service.d.ts +44 -0
  62. package/dist/services/scroll-position.service.d.ts +50 -0
  63. package/dist/styles.css +1963 -0
  64. package/dist/types/frontend-tool.d.ts +37 -0
  65. package/dist/types/human-in-the-loop.d.ts +44 -0
  66. package/dist/utils/agent-context.utils.d.ts +75 -0
  67. package/dist/utils/agent.utils.d.ts +99 -0
  68. package/dist/utils/chat-config.utils.d.ts +166 -0
  69. package/dist/utils/copilotkit.utils.d.ts +16 -0
  70. package/dist/utils/frontend-tool.utils.d.ts +119 -0
  71. package/dist/utils/human-in-the-loop.utils.d.ts +92 -0
  72. package/eslint.config.mjs +20 -0
  73. package/ng-package.json +19 -0
  74. package/package.json +96 -0
  75. package/slots.md +331 -0
  76. package/src/components/chat/__tests__/copilot-chat-assistant-message.component.spec.ts +282 -0
  77. package/src/components/chat/__tests__/copilot-chat-input.component.spec.ts +419 -0
  78. package/src/components/chat/__tests__/copilot-chat-message-view.component.spec.ts +372 -0
  79. package/src/components/chat/__tests__/copilot-chat-user-message.component.spec.ts +249 -0
  80. package/src/components/chat/copilot-chat-assistant-message-buttons.component.ts +292 -0
  81. package/src/components/chat/copilot-chat-assistant-message-renderer.component.ts +472 -0
  82. package/src/components/chat/copilot-chat-assistant-message-toolbar.component.ts +29 -0
  83. package/src/components/chat/copilot-chat-assistant-message.component.ts +463 -0
  84. package/src/components/chat/copilot-chat-assistant-message.types.ts +50 -0
  85. package/src/components/chat/copilot-chat-audio-recorder.component.ts +241 -0
  86. package/src/components/chat/copilot-chat-buttons.component.ts +308 -0
  87. package/src/components/chat/copilot-chat-buttons.component.ts.bak +471 -0
  88. package/src/components/chat/copilot-chat-input-defaults.ts +47 -0
  89. package/src/components/chat/copilot-chat-input.component.ts +512 -0
  90. package/src/components/chat/copilot-chat-input.types.ts +148 -0
  91. package/src/components/chat/copilot-chat-message-view-cursor.component.ts +51 -0
  92. package/src/components/chat/copilot-chat-message-view.component.ts +233 -0
  93. package/src/components/chat/copilot-chat-message-view.types.ts +39 -0
  94. package/src/components/chat/copilot-chat-textarea.component.ts +220 -0
  95. package/src/components/chat/copilot-chat-tool-calls-view.component.ts +261 -0
  96. package/src/components/chat/copilot-chat-toolbar.component.ts +35 -0
  97. package/src/components/chat/copilot-chat-tools-menu.component.ts +185 -0
  98. package/src/components/chat/copilot-chat-user-message-branch-navigation.component.ts +121 -0
  99. package/src/components/chat/copilot-chat-user-message-buttons.component.ts +170 -0
  100. package/src/components/chat/copilot-chat-user-message-renderer.component.ts +37 -0
  101. package/src/components/chat/copilot-chat-user-message-toolbar.component.ts +37 -0
  102. package/src/components/chat/copilot-chat-user-message.component.ts +247 -0
  103. package/src/components/chat/copilot-chat-user-message.types.ts +42 -0
  104. package/src/components/chat/copilot-chat-view-disclaimer.component.ts +51 -0
  105. package/src/components/chat/copilot-chat-view-feather.component.ts +47 -0
  106. package/src/components/chat/copilot-chat-view-handlers.service.ts +14 -0
  107. package/src/components/chat/copilot-chat-view-input-container.component.ts +87 -0
  108. package/src/components/chat/copilot-chat-view-scroll-to-bottom-button.component.ts +79 -0
  109. package/src/components/chat/copilot-chat-view-scroll-view.component.ts +322 -0
  110. package/src/components/chat/copilot-chat-view.component.ts +420 -0
  111. package/src/components/chat/copilot-chat-view.types.ts +52 -0
  112. package/src/components/chat/copilot-chat.component.ts +232 -0
  113. package/src/components/copilotkit-tool-render.component.ts +169 -0
  114. package/src/core/__tests__/copilotkit.service.spec.ts +1051 -0
  115. package/src/core/__tests__/copilotkit.service.wildcard.spec.ts +316 -0
  116. package/src/core/chat-configuration/__tests__/chat-configuration.service.spec.ts +287 -0
  117. package/src/core/chat-configuration/chat-configuration.providers.ts +71 -0
  118. package/src/core/chat-configuration/chat-configuration.service.ts +162 -0
  119. package/src/core/chat-configuration/chat-configuration.types.ts +57 -0
  120. package/src/core/copilotkit.providers.ts +59 -0
  121. package/src/core/copilotkit.service.ts +542 -0
  122. package/src/core/copilotkit.types.ts +132 -0
  123. package/src/directives/__tests__/copilotkit-agent-context.directive.spec.ts +384 -0
  124. package/src/directives/__tests__/copilotkit-agent.directive.spec.ts +253 -0
  125. package/src/directives/__tests__/copilotkit-chat-config.directive.spec.ts +385 -0
  126. package/src/directives/__tests__/copilotkit-config.directive.spec.ts +69 -0
  127. package/src/directives/__tests__/copilotkit-frontend-tool-simple.directive.spec.ts +60 -0
  128. package/src/directives/__tests__/copilotkit-frontend-tool.directive.spec.ts +108 -0
  129. package/src/directives/__tests__/copilotkit-human-in-the-loop.directive.spec.ts +452 -0
  130. package/src/directives/copilotkit-agent-context.directive.ts +138 -0
  131. package/src/directives/copilotkit-agent.directive.ts +225 -0
  132. package/src/directives/copilotkit-chat-config.directive.ts +241 -0
  133. package/src/directives/copilotkit-config.directive.ts +81 -0
  134. package/src/directives/copilotkit-frontend-tool.directive.ts +145 -0
  135. package/src/directives/copilotkit-human-in-the-loop.directive.ts +281 -0
  136. package/src/directives/stick-to-bottom.directive.ts +204 -0
  137. package/src/index.ts +105 -0
  138. package/src/lib/directives/tooltip.directive.ts +292 -0
  139. package/src/lib/slots/__tests__/slot.utils.spec.ts +377 -0
  140. package/src/lib/slots/copilot-slot.component.ts +135 -0
  141. package/src/lib/slots/index.ts +3 -0
  142. package/src/lib/slots/slot.types.ts +64 -0
  143. package/src/lib/slots/slot.utils.ts +289 -0
  144. package/src/lib/utils.ts +10 -0
  145. package/src/public-api.ts +1 -0
  146. package/src/services/resize-observer.service.ts +181 -0
  147. package/src/services/scroll-position.service.ts +169 -0
  148. package/src/styles/globals.css +266 -0
  149. package/src/styles/index.css +3 -0
  150. package/src/test-setup.ts +15 -0
  151. package/src/testing/index.ts +3 -0
  152. package/src/testing/testing.utils.ts +248 -0
  153. package/src/types/frontend-tool.ts +44 -0
  154. package/src/types/human-in-the-loop.ts +52 -0
  155. package/src/utils/__tests__/agent.utils.spec.ts +234 -0
  156. package/src/utils/__tests__/chat-config.utils.spec.ts +306 -0
  157. package/src/utils/__tests__/frontend-tool-inject.spec.ts +350 -0
  158. package/src/utils/__tests__/frontend-tool-integration.spec.ts +199 -0
  159. package/src/utils/__tests__/frontend-tool.utils.spec.ts +272 -0
  160. package/src/utils/__tests__/human-in-the-loop.utils.spec.ts +365 -0
  161. package/src/utils/agent-context.utils.ts +133 -0
  162. package/src/utils/agent.utils.ts +239 -0
  163. package/src/utils/chat-config.utils.ts +221 -0
  164. package/src/utils/copilotkit.utils.ts +20 -0
  165. package/src/utils/frontend-tool.utils.ts +266 -0
  166. package/src/utils/human-in-the-loop.utils.ts +359 -0
  167. package/tsconfig.json +33 -0
  168. package/tsconfig.spec.json +12 -0
  169. package/vitest.config.mts +34 -0
@@ -0,0 +1,162 @@
1
+ import { Injectable, Inject, Optional, signal } from '@angular/core';
2
+ import {
3
+ CopilotChatConfiguration,
4
+ CopilotChatLabels,
5
+ COPILOT_CHAT_DEFAULT_LABELS,
6
+ COPILOT_CHAT_INITIAL_CONFIG
7
+ } from './chat-configuration.types';
8
+
9
+ /**
10
+ * Service for managing CopilotKit chat configuration.
11
+ * Can be provided at different component levels for scoped configuration.
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * // Global configuration
16
+ * providers: [provideCopilotChatConfiguration({ labels: { ... } })]
17
+ *
18
+ * // Component-scoped configuration
19
+ * @Component({
20
+ * providers: [provideCopilotChatConfiguration()],
21
+ * ...
22
+ * })
23
+ * ```
24
+ */
25
+ @Injectable()
26
+ export class CopilotChatConfigurationService {
27
+ // State signals
28
+ private readonly _labels: ReturnType<typeof signal<CopilotChatLabels>>;
29
+ private readonly _inputValue: ReturnType<typeof signal<string | undefined>>;
30
+ private readonly _onSubmitInput: ReturnType<typeof signal<((value: string) => void) | undefined>>;
31
+ private readonly _onChangeInput: ReturnType<typeof signal<((value: string) => void) | undefined>>;
32
+
33
+ // Public readonly signals
34
+ readonly labels: ReturnType<typeof signal<CopilotChatLabels>>['asReadonly'] extends () => infer R ? R : never;
35
+ readonly inputValue: ReturnType<typeof signal<string | undefined>>['asReadonly'] extends () => infer R ? R : never;
36
+
37
+ constructor(
38
+ @Optional() @Inject(COPILOT_CHAT_INITIAL_CONFIG) private readonly initialConfig: CopilotChatConfiguration | null
39
+ ) {
40
+ // Initialize state signals
41
+ this._labels = signal<CopilotChatLabels>(
42
+ this.mergeLabels(this.initialConfig?.labels)
43
+ );
44
+ this._inputValue = signal<string | undefined>(
45
+ this.initialConfig?.inputValue
46
+ );
47
+ this._onSubmitInput = signal<((value: string) => void) | undefined>(
48
+ this.initialConfig?.onSubmitInput
49
+ );
50
+ this._onChangeInput = signal<((value: string) => void) | undefined>(
51
+ this.initialConfig?.onChangeInput
52
+ );
53
+
54
+ // Initialize public readonly signals
55
+ this.labels = this._labels.asReadonly();
56
+ this.inputValue = this._inputValue.asReadonly();
57
+ }
58
+
59
+ /**
60
+ * Update chat labels (partial update, merged with defaults)
61
+ */
62
+ setLabels(labels: Partial<CopilotChatLabels>): void {
63
+ this._labels.set(this.mergeLabels(labels));
64
+ }
65
+
66
+ /**
67
+ * Update the current input value
68
+ */
69
+ setInputValue(value: string | undefined): void {
70
+ this._inputValue.set(value);
71
+ // Also trigger change handler if set
72
+ if (value !== undefined) {
73
+ this.changeInput(value);
74
+ }
75
+ }
76
+
77
+ /**
78
+ * Set the submit input handler
79
+ */
80
+ setSubmitHandler(handler: ((value: string) => void) | undefined): void {
81
+ this._onSubmitInput.set(handler);
82
+ }
83
+
84
+ /**
85
+ * Set the change input handler
86
+ */
87
+ setChangeHandler(handler: ((value: string) => void) | undefined): void {
88
+ this._onChangeInput.set(handler);
89
+ }
90
+
91
+ /**
92
+ * Submit the current input value
93
+ */
94
+ submitInput(value: string): void {
95
+ const handler = this._onSubmitInput();
96
+ if (handler) {
97
+ handler(value);
98
+ }
99
+ }
100
+
101
+ /**
102
+ * Handle input value change
103
+ */
104
+ changeInput(value: string): void {
105
+ const handler = this._onChangeInput();
106
+ if (handler) {
107
+ handler(value);
108
+ }
109
+ }
110
+
111
+ /**
112
+ * Update the entire configuration at once
113
+ */
114
+ updateConfiguration(config: CopilotChatConfiguration): void {
115
+ if (config.labels) {
116
+ this.setLabels(config.labels);
117
+ }
118
+ if (config.inputValue !== undefined) {
119
+ this._inputValue.set(config.inputValue);
120
+ }
121
+ if (config.onSubmitInput) {
122
+ this.setSubmitHandler(config.onSubmitInput);
123
+ }
124
+ if (config.onChangeInput) {
125
+ this.setChangeHandler(config.onChangeInput);
126
+ }
127
+ }
128
+
129
+ /**
130
+ * Reset configuration to defaults
131
+ */
132
+ reset(): void {
133
+ this._labels.set(COPILOT_CHAT_DEFAULT_LABELS);
134
+ this._inputValue.set(undefined);
135
+ this._onSubmitInput.set(undefined);
136
+ this._onChangeInput.set(undefined);
137
+ }
138
+
139
+ /**
140
+ * Get the current submit handler
141
+ */
142
+ getSubmitHandler(): ((value: string) => void) | undefined {
143
+ return this._onSubmitInput();
144
+ }
145
+
146
+ /**
147
+ * Get the current change handler
148
+ */
149
+ getChangeHandler(): ((value: string) => void) | undefined {
150
+ return this._onChangeInput();
151
+ }
152
+
153
+ /**
154
+ * Merge partial labels with defaults
155
+ */
156
+ private mergeLabels(partial?: Partial<CopilotChatLabels>): CopilotChatLabels {
157
+ return {
158
+ ...COPILOT_CHAT_DEFAULT_LABELS,
159
+ ...partial
160
+ };
161
+ }
162
+ }
@@ -0,0 +1,57 @@
1
+ import { InjectionToken } from "@angular/core";
2
+
3
+ // Type for chat labels
4
+ export interface CopilotChatLabels {
5
+ chatInputPlaceholder: string;
6
+ chatInputToolbarStartTranscribeButtonLabel: string;
7
+ chatInputToolbarCancelTranscribeButtonLabel: string;
8
+ chatInputToolbarFinishTranscribeButtonLabel: string;
9
+ chatInputToolbarAddButtonLabel: string;
10
+ chatInputToolbarToolsButtonLabel: string;
11
+ assistantMessageToolbarCopyCodeLabel: string;
12
+ assistantMessageToolbarCopyCodeCopiedLabel: string;
13
+ assistantMessageToolbarCopyMessageLabel: string;
14
+ assistantMessageToolbarThumbsUpLabel: string;
15
+ assistantMessageToolbarThumbsDownLabel: string;
16
+ assistantMessageToolbarReadAloudLabel: string;
17
+ assistantMessageToolbarRegenerateLabel: string;
18
+ userMessageToolbarCopyMessageLabel: string;
19
+ userMessageToolbarEditMessageLabel: string;
20
+ chatDisclaimerText: string;
21
+ }
22
+
23
+ // Default labels constant
24
+ export const COPILOT_CHAT_DEFAULT_LABELS: CopilotChatLabels = {
25
+ chatInputPlaceholder: "Type a message...",
26
+ chatInputToolbarStartTranscribeButtonLabel: "Transcribe",
27
+ chatInputToolbarCancelTranscribeButtonLabel: "Cancel",
28
+ chatInputToolbarFinishTranscribeButtonLabel: "Finish",
29
+ chatInputToolbarAddButtonLabel: "Add photos or files",
30
+ chatInputToolbarToolsButtonLabel: "Tools",
31
+ assistantMessageToolbarCopyCodeLabel: "Copy",
32
+ assistantMessageToolbarCopyCodeCopiedLabel: "Copied",
33
+ assistantMessageToolbarCopyMessageLabel: "Copy",
34
+ assistantMessageToolbarThumbsUpLabel: "Good response",
35
+ assistantMessageToolbarThumbsDownLabel: "Bad response",
36
+ assistantMessageToolbarReadAloudLabel: "Read aloud",
37
+ assistantMessageToolbarRegenerateLabel: "Regenerate",
38
+ userMessageToolbarCopyMessageLabel: "Copy",
39
+ userMessageToolbarEditMessageLabel: "Edit",
40
+ chatDisclaimerText:
41
+ "AI can make mistakes. Please verify important information.",
42
+ };
43
+
44
+ // Configuration interface
45
+ export interface CopilotChatConfiguration {
46
+ labels?: Partial<CopilotChatLabels>;
47
+ inputValue?: string;
48
+ onSubmitInput?: (value: string) => void;
49
+ onChangeInput?: (value: string) => void;
50
+ }
51
+
52
+ // Injection token for initial configuration
53
+ export const COPILOT_CHAT_INITIAL_CONFIG =
54
+ new InjectionToken<CopilotChatConfiguration>("COPILOT_CHAT_INITIAL_CONFIG", {
55
+ providedIn: "root",
56
+ factory: () => ({}),
57
+ });
@@ -0,0 +1,59 @@
1
+ import { Provider } from "@angular/core";
2
+ import {
3
+ COPILOTKIT_RUNTIME_URL,
4
+ COPILOTKIT_HEADERS,
5
+ COPILOTKIT_PROPERTIES,
6
+ COPILOTKIT_AGENTS,
7
+ COPILOTKIT_RENDER_TOOL_CALLS,
8
+ COPILOTKIT_FRONTEND_TOOLS,
9
+ COPILOTKIT_HUMAN_IN_THE_LOOP,
10
+ ToolCallRender,
11
+ AngularFrontendTool,
12
+ AngularHumanInTheLoop,
13
+ } from "./copilotkit.types";
14
+ import { AbstractAgent } from "@ag-ui/client";
15
+
16
+ export interface ProvideCopilotKitOptions {
17
+ runtimeUrl?: string;
18
+ headers?: Record<string, string>;
19
+ properties?: Record<string, unknown>;
20
+ agents?: Record<string, AbstractAgent>;
21
+ renderToolCalls?: ToolCallRender<unknown>[];
22
+ frontendTools?: AngularFrontendTool<any>[];
23
+ humanInTheLoop?: AngularHumanInTheLoop<any>[];
24
+ }
25
+
26
+ export function provideCopilotKit(
27
+ options: ProvideCopilotKitOptions = {}
28
+ ): Provider[] {
29
+ return [
30
+ {
31
+ provide: COPILOTKIT_RUNTIME_URL,
32
+ useValue: options.runtimeUrl,
33
+ },
34
+ {
35
+ provide: COPILOTKIT_HEADERS,
36
+ useValue: options.headers ?? {},
37
+ },
38
+ {
39
+ provide: COPILOTKIT_PROPERTIES,
40
+ useValue: options.properties ?? {},
41
+ },
42
+ {
43
+ provide: COPILOTKIT_AGENTS,
44
+ useValue: options.agents ?? {},
45
+ },
46
+ {
47
+ provide: COPILOTKIT_RENDER_TOOL_CALLS,
48
+ useValue: options.renderToolCalls ?? [],
49
+ },
50
+ {
51
+ provide: COPILOTKIT_FRONTEND_TOOLS,
52
+ useValue: options.frontendTools ?? [],
53
+ },
54
+ {
55
+ provide: COPILOTKIT_HUMAN_IN_THE_LOOP,
56
+ useValue: options.humanInTheLoop ?? [],
57
+ },
58
+ ];
59
+ }