@supernal/interface 1.0.7 → 1.0.9

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 (159) hide show
  1. package/dist/cjs/src/adapters/copilotkit/CopilotKitAdapter.js +3 -5
  2. package/dist/cjs/src/adapters/copilotkit/CopilotKitAdapter.js.map +1 -1
  3. package/dist/cjs/src/adapters/index.js +3 -4
  4. package/dist/cjs/src/adapters/index.js.map +1 -1
  5. package/dist/cjs/src/ai/AIInterface.js +111 -61
  6. package/dist/cjs/src/ai/AIInterface.js.map +1 -1
  7. package/dist/cjs/src/ai/ToolExecutor.js +36 -1
  8. package/dist/cjs/src/ai/ToolExecutor.js.map +1 -1
  9. package/dist/cjs/src/ai/ToolMatcher.js +6 -0
  10. package/dist/cjs/src/ai/ToolMatcher.js.map +1 -1
  11. package/dist/cjs/src/background/architecture/ArchitectureInitializer.js +13 -2
  12. package/dist/cjs/src/background/architecture/ArchitectureInitializer.js.map +1 -1
  13. package/dist/cjs/src/background/architecture/Containers.js +72 -2
  14. package/dist/cjs/src/background/architecture/Containers.js.map +1 -1
  15. package/dist/cjs/src/background/architecture/index.js +2 -1
  16. package/dist/cjs/src/background/architecture/index.js.map +1 -1
  17. package/dist/cjs/src/background/location/LocationContext.js +19 -2
  18. package/dist/cjs/src/background/location/LocationContext.js.map +1 -1
  19. package/dist/cjs/src/background/navigation/NavigationGraph.js +7 -0
  20. package/dist/cjs/src/background/navigation/NavigationGraph.js.map +1 -1
  21. package/dist/cjs/src/background/registry/ComponentRegistry.js +0 -2
  22. package/dist/cjs/src/background/registry/ComponentRegistry.js.map +1 -1
  23. package/dist/cjs/src/background/registry/ToolRegistry.js +83 -123
  24. package/dist/cjs/src/background/registry/ToolRegistry.js.map +1 -1
  25. package/dist/cjs/src/browser.js +7 -1
  26. package/dist/cjs/src/browser.js.map +1 -1
  27. package/dist/cjs/src/decorators/Component.js +4 -5
  28. package/dist/cjs/src/decorators/Component.js.map +1 -1
  29. package/dist/cjs/src/decorators/Tool.js +1 -6
  30. package/dist/cjs/src/decorators/Tool.js.map +1 -1
  31. package/dist/cjs/src/decorators/ToolHelpers.js +1 -3
  32. package/dist/cjs/src/decorators/ToolHelpers.js.map +1 -1
  33. package/dist/cjs/src/decorators/ToolPreset.js +14 -14
  34. package/dist/cjs/src/decorators/ToolPreset.js.map +1 -1
  35. package/dist/cjs/src/decorators/ToolProvider.js +30 -20
  36. package/dist/cjs/src/decorators/ToolProvider.js.map +1 -1
  37. package/dist/cjs/src/decorators/index.js +8 -13
  38. package/dist/cjs/src/decorators/index.js.map +1 -1
  39. package/dist/cjs/src/exposure/ExposureCollector.js +27 -0
  40. package/dist/cjs/src/exposure/ExposureCollector.js.map +1 -1
  41. package/dist/cjs/src/index.js +6 -9
  42. package/dist/cjs/src/index.js.map +1 -1
  43. package/dist/cjs/src/mcp/server.js +12 -14
  44. package/dist/cjs/src/mcp/server.js.map +1 -1
  45. package/dist/cjs/src/react/hooks/useChatWithContext.js +4 -10
  46. package/dist/cjs/src/react/hooks/useChatWithContext.js.map +1 -1
  47. package/dist/cjs/src/types/ComponentState.js.map +1 -1
  48. package/dist/esm/src/adapters/copilotkit/CopilotKitAdapter.d.ts.map +1 -1
  49. package/dist/esm/src/adapters/copilotkit/CopilotKitAdapter.js +3 -5
  50. package/dist/esm/src/adapters/copilotkit/CopilotKitAdapter.js.map +1 -1
  51. package/dist/esm/src/adapters/index.d.ts +0 -2
  52. package/dist/esm/src/adapters/index.d.ts.map +1 -1
  53. package/dist/esm/src/adapters/index.js +2 -1
  54. package/dist/esm/src/adapters/index.js.map +1 -1
  55. package/dist/esm/src/adapters/types/index.d.ts +0 -2
  56. package/dist/esm/src/adapters/types/index.d.ts.map +1 -1
  57. package/dist/esm/src/ai/AIInterface.d.ts +5 -1
  58. package/dist/esm/src/ai/AIInterface.d.ts.map +1 -1
  59. package/dist/esm/src/ai/AIInterface.js +111 -61
  60. package/dist/esm/src/ai/AIInterface.js.map +1 -1
  61. package/dist/esm/src/ai/ToolExecutor.js +36 -1
  62. package/dist/esm/src/ai/ToolExecutor.js.map +1 -1
  63. package/dist/esm/src/ai/ToolMatcher.d.ts +1 -0
  64. package/dist/esm/src/ai/ToolMatcher.d.ts.map +1 -1
  65. package/dist/esm/src/ai/ToolMatcher.js +6 -0
  66. package/dist/esm/src/ai/ToolMatcher.js.map +1 -1
  67. package/dist/esm/src/background/architecture/ArchitectureInitializer.d.ts +1 -1
  68. package/dist/esm/src/background/architecture/ArchitectureInitializer.d.ts.map +1 -1
  69. package/dist/esm/src/background/architecture/ArchitectureInitializer.js +13 -2
  70. package/dist/esm/src/background/architecture/ArchitectureInitializer.js.map +1 -1
  71. package/dist/esm/src/background/architecture/Containers.d.ts +35 -2
  72. package/dist/esm/src/background/architecture/Containers.d.ts.map +1 -1
  73. package/dist/esm/src/background/architecture/Containers.js +70 -2
  74. package/dist/esm/src/background/architecture/Containers.js.map +1 -1
  75. package/dist/esm/src/background/architecture/index.d.ts +1 -1
  76. package/dist/esm/src/background/architecture/index.d.ts.map +1 -1
  77. package/dist/esm/src/background/architecture/index.js +1 -1
  78. package/dist/esm/src/background/architecture/index.js.map +1 -1
  79. package/dist/esm/src/background/location/LocationContext.d.ts +3 -2
  80. package/dist/esm/src/background/location/LocationContext.d.ts.map +1 -1
  81. package/dist/esm/src/background/location/LocationContext.js +19 -2
  82. package/dist/esm/src/background/location/LocationContext.js.map +1 -1
  83. package/dist/esm/src/background/navigation/NavigationGraph.d.ts +5 -0
  84. package/dist/esm/src/background/navigation/NavigationGraph.d.ts.map +1 -1
  85. package/dist/esm/src/background/navigation/NavigationGraph.js +7 -0
  86. package/dist/esm/src/background/navigation/NavigationGraph.js.map +1 -1
  87. package/dist/esm/src/background/registry/ComponentRegistry.d.ts +0 -4
  88. package/dist/esm/src/background/registry/ComponentRegistry.d.ts.map +1 -1
  89. package/dist/esm/src/background/registry/ComponentRegistry.js +0 -2
  90. package/dist/esm/src/background/registry/ComponentRegistry.js.map +1 -1
  91. package/dist/esm/src/background/registry/ToolRegistry.d.ts +24 -38
  92. package/dist/esm/src/background/registry/ToolRegistry.d.ts.map +1 -1
  93. package/dist/esm/src/background/registry/ToolRegistry.js +81 -121
  94. package/dist/esm/src/background/registry/ToolRegistry.js.map +1 -1
  95. package/dist/esm/src/browser.d.ts +3 -1
  96. package/dist/esm/src/browser.d.ts.map +1 -1
  97. package/dist/esm/src/browser.js +3 -1
  98. package/dist/esm/src/browser.js.map +1 -1
  99. package/dist/esm/src/decorators/Component.d.ts +1 -8
  100. package/dist/esm/src/decorators/Component.d.ts.map +1 -1
  101. package/dist/esm/src/decorators/Component.js +4 -5
  102. package/dist/esm/src/decorators/Component.js.map +1 -1
  103. package/dist/esm/src/decorators/Tool.d.ts +1 -6
  104. package/dist/esm/src/decorators/Tool.d.ts.map +1 -1
  105. package/dist/esm/src/decorators/Tool.js +1 -6
  106. package/dist/esm/src/decorators/Tool.js.map +1 -1
  107. package/dist/esm/src/decorators/ToolHelpers.d.ts.map +1 -1
  108. package/dist/esm/src/decorators/ToolHelpers.js +1 -3
  109. package/dist/esm/src/decorators/ToolHelpers.js.map +1 -1
  110. package/dist/esm/src/decorators/ToolPreset.d.ts +12 -9
  111. package/dist/esm/src/decorators/ToolPreset.d.ts.map +1 -1
  112. package/dist/esm/src/decorators/ToolPreset.js +13 -13
  113. package/dist/esm/src/decorators/ToolPreset.js.map +1 -1
  114. package/dist/esm/src/decorators/ToolProvider.d.ts +5 -21
  115. package/dist/esm/src/decorators/ToolProvider.d.ts.map +1 -1
  116. package/dist/esm/src/decorators/ToolProvider.js +30 -19
  117. package/dist/esm/src/decorators/ToolProvider.js.map +1 -1
  118. package/dist/esm/src/decorators/index.d.ts +6 -12
  119. package/dist/esm/src/decorators/index.d.ts.map +1 -1
  120. package/dist/esm/src/decorators/index.js +7 -12
  121. package/dist/esm/src/decorators/index.js.map +1 -1
  122. package/dist/esm/src/exposure/ExposureCollector.d.ts +8 -0
  123. package/dist/esm/src/exposure/ExposureCollector.d.ts.map +1 -1
  124. package/dist/esm/src/exposure/ExposureCollector.js +27 -0
  125. package/dist/esm/src/exposure/ExposureCollector.js.map +1 -1
  126. package/dist/esm/src/index.d.ts +5 -6
  127. package/dist/esm/src/index.d.ts.map +1 -1
  128. package/dist/esm/src/index.js +5 -6
  129. package/dist/esm/src/index.js.map +1 -1
  130. package/dist/esm/src/mcp/server.d.ts +1 -1
  131. package/dist/esm/src/mcp/server.d.ts.map +1 -1
  132. package/dist/esm/src/mcp/server.js +12 -14
  133. package/dist/esm/src/mcp/server.js.map +1 -1
  134. package/dist/esm/src/react/hooks/useChatWithContext.d.ts +0 -2
  135. package/dist/esm/src/react/hooks/useChatWithContext.d.ts.map +1 -1
  136. package/dist/esm/src/react/hooks/useChatWithContext.js +4 -10
  137. package/dist/esm/src/react/hooks/useChatWithContext.js.map +1 -1
  138. package/dist/esm/src/types/ComponentState.d.ts +0 -4
  139. package/dist/esm/src/types/ComponentState.d.ts.map +1 -1
  140. package/dist/esm/src/types/ComponentState.js.map +1 -1
  141. package/package.json +22 -21
  142. package/dist/cjs/src/adapters/native/NativeAdapter.js +0 -268
  143. package/dist/cjs/src/adapters/native/NativeAdapter.js.map +0 -1
  144. package/dist/cjs/src/adapters/native/index.js +0 -10
  145. package/dist/cjs/src/adapters/native/index.js.map +0 -1
  146. package/dist/cjs/src/ui/react/chat/ChatBubble.js +0 -221
  147. package/dist/cjs/src/ui/react/chat/ChatBubble.js.map +0 -1
  148. package/dist/esm/src/adapters/native/NativeAdapter.d.ts +0 -47
  149. package/dist/esm/src/adapters/native/NativeAdapter.d.ts.map +0 -1
  150. package/dist/esm/src/adapters/native/NativeAdapter.js +0 -230
  151. package/dist/esm/src/adapters/native/NativeAdapter.js.map +0 -1
  152. package/dist/esm/src/adapters/native/index.d.ts +0 -6
  153. package/dist/esm/src/adapters/native/index.d.ts.map +0 -1
  154. package/dist/esm/src/adapters/native/index.js +0 -5
  155. package/dist/esm/src/adapters/native/index.js.map +0 -1
  156. package/dist/esm/src/ui/react/chat/ChatBubble.d.ts +0 -27
  157. package/dist/esm/src/ui/react/chat/ChatBubble.d.ts.map +0 -1
  158. package/dist/esm/src/ui/react/chat/ChatBubble.js +0 -184
  159. package/dist/esm/src/ui/react/chat/ChatBubble.js.map +0 -1
@@ -1,230 +0,0 @@
1
- /**
2
- * Native Adapter
3
- *
4
- * Implements ChatUIAdapter using our built-in ChatBubble component.
5
- * Zero external dependencies - works out of the box.
6
- *
7
- * This adapter provides:
8
- * - Lightweight chat UI
9
- * - Direct tool execution via ToolRegistry
10
- * - No LLM required (uses pattern matching)
11
- */
12
- import React, { useState, useCallback, useRef, useEffect } from 'react';
13
- import { ChatBubble } from '../../ui/react/chat/ChatBubble.js';
14
- /**
15
- * Native Adapter Implementation
16
- */
17
- export class NativeAdapter {
18
- constructor(config = {}) {
19
- this.name = 'native';
20
- this.tools = [];
21
- this.readables = [];
22
- this.executionCallbacks = [];
23
- this.config = {
24
- usePatternMatching: true,
25
- ...config,
26
- };
27
- }
28
- async initialize() {
29
- // Native adapter doesn't need initialization
30
- }
31
- registerTools(tools) {
32
- this.tools = tools;
33
- }
34
- registerReadables(readables) {
35
- this.readables = readables;
36
- }
37
- onToolExecution(callback) {
38
- this.executionCallbacks.push(callback);
39
- return () => {
40
- this.executionCallbacks = this.executionCallbacks.filter(cb => cb !== callback);
41
- };
42
- }
43
- notifyExecution(execution) {
44
- this.executionCallbacks.forEach(cb => {
45
- try {
46
- cb(execution);
47
- }
48
- catch {
49
- // Ignore callback errors
50
- }
51
- });
52
- }
53
- isReady() {
54
- return true; // Always ready
55
- }
56
- dispose() {
57
- this.executionCallbacks = [];
58
- this.tools = [];
59
- this.readables = [];
60
- }
61
- render(props) {
62
- return (React.createElement(NativeChatWrapper, { adapter: this, tools: this.tools, config: this.config, ...props }));
63
- }
64
- }
65
- function NativeChatWrapper({ adapter, tools, config: _config, ...props }) {
66
- // Suppress unused props warning for spreading
67
- void props;
68
- const [messages, setMessages] = useState([]);
69
- const toolsRef = useRef(tools);
70
- // Keep tools ref updated
71
- useEffect(() => {
72
- toolsRef.current = tools;
73
- }, [tools]);
74
- /**
75
- * Find matching tool using pattern matching
76
- */
77
- const findMatchingTool = useCallback((query) => {
78
- const lowerQuery = query.toLowerCase().trim();
79
- let bestTool = null;
80
- let bestScore = 0;
81
- const params = [];
82
- for (const tool of toolsRef.current) {
83
- let score = 0;
84
- // Check examples
85
- if (tool.examples && Array.isArray(tool.examples)) {
86
- for (const example of tool.examples) {
87
- if (typeof example !== 'string')
88
- continue;
89
- const exampleLower = example.toLowerCase();
90
- // Exact match
91
- if (exampleLower === lowerQuery) {
92
- score += 20;
93
- }
94
- // Query starts with example pattern
95
- else if (lowerQuery.startsWith(exampleLower.replace(/\{[^}]+\}/g, '').trim())) {
96
- score += 15;
97
- // Extract parameter from trailing text
98
- const pattern = exampleLower.replace(/\{[^}]+\}/g, '').trim();
99
- const trailing = query.substring(pattern.length).trim();
100
- if (trailing) {
101
- params.push(trailing);
102
- }
103
- }
104
- // Partial match
105
- else if (exampleLower.includes(lowerQuery) || lowerQuery.includes(exampleLower)) {
106
- score += 5;
107
- }
108
- }
109
- }
110
- // Check method name
111
- if (tool.methodName) {
112
- const methodLower = tool.methodName.toLowerCase();
113
- if (lowerQuery.includes(methodLower)) {
114
- score += 3;
115
- }
116
- }
117
- if (score > bestScore) {
118
- bestScore = score;
119
- bestTool = tool;
120
- }
121
- }
122
- return { tool: bestTool, params };
123
- }, []);
124
- /**
125
- * Execute a tool
126
- */
127
- const executeTool = useCallback(async (tool, params) => {
128
- const start = Date.now();
129
- try {
130
- let result;
131
- if (tool.method) {
132
- result = await tool.method(...params);
133
- }
134
- else if (tool.instance && tool.methodName) {
135
- result = await tool.instance[tool.methodName](...params);
136
- }
137
- else {
138
- throw new Error(`Tool ${tool.name} has no executable method`);
139
- }
140
- const execution = {
141
- toolId: tool.toolId,
142
- toolName: tool.name || tool.methodName || 'unknown',
143
- args: params.reduce((acc, p, i) => ({ ...acc, [`arg${i}`]: p }), {}),
144
- result,
145
- success: true,
146
- timestamp: new Date(),
147
- duration: Date.now() - start,
148
- containerId: tool.containerId,
149
- dangerLevel: tool.dangerLevel,
150
- approvalRequired: tool.requiresApproval,
151
- };
152
- adapter.notifyExecution(execution);
153
- // Extract message from result
154
- if (typeof result === 'object' && result !== null && 'message' in result) {
155
- return { success: true, message: result.message };
156
- }
157
- return { success: true, message: `✅ Executed ${tool.name}` };
158
- }
159
- catch (error) {
160
- const execution = {
161
- toolId: tool.toolId,
162
- toolName: tool.name || tool.methodName || 'unknown',
163
- args: params.reduce((acc, p, i) => ({ ...acc, [`arg${i}`]: p }), {}),
164
- result: null,
165
- success: false,
166
- error: error instanceof Error ? error : new Error(String(error)),
167
- timestamp: new Date(),
168
- duration: Date.now() - start,
169
- containerId: tool.containerId,
170
- dangerLevel: tool.dangerLevel,
171
- approvalRequired: tool.requiresApproval,
172
- };
173
- adapter.notifyExecution(execution);
174
- return {
175
- success: false,
176
- message: `❌ Error: ${error instanceof Error ? error.message : String(error)}`
177
- };
178
- }
179
- }, [adapter]);
180
- /**
181
- * Handle user message
182
- */
183
- const handleSendMessage = useCallback(async (text) => {
184
- // Add user message
185
- const userMessage = {
186
- id: `user-${Date.now()}`,
187
- text,
188
- type: 'user',
189
- timestamp: new Date().toISOString(),
190
- };
191
- setMessages(prev => [...prev, userMessage]);
192
- // Find and execute tool
193
- const { tool, params } = findMatchingTool(text);
194
- if (!tool) {
195
- // No matching tool
196
- const systemMessage = {
197
- id: `system-${Date.now()}`,
198
- text: `❓ No matching command found. Try: ${toolsRef.current.slice(0, 3).flatMap(t => t.examples?.slice(0, 1) || []).join(', ')}`,
199
- type: 'system',
200
- timestamp: new Date().toISOString(),
201
- };
202
- setMessages(prev => [...prev, systemMessage]);
203
- return;
204
- }
205
- // Execute tool
206
- const result = await executeTool(tool, params);
207
- // Add response message
208
- const responseMessage = {
209
- id: `ai-${Date.now()}`,
210
- text: result.message,
211
- type: result.success ? 'ai' : 'system',
212
- timestamp: new Date().toISOString(),
213
- };
214
- setMessages(prev => [...prev, responseMessage]);
215
- }, [findMatchingTool, executeTool]);
216
- /**
217
- * Clear chat
218
- */
219
- const handleClearChat = useCallback(() => {
220
- setMessages([]);
221
- }, []);
222
- return (React.createElement(ChatBubble, { messages: messages, onSendMessage: handleSendMessage, onClearChat: handleClearChat }));
223
- }
224
- /**
225
- * Factory function for creating Native adapter
226
- */
227
- export function createNativeAdapter(config) {
228
- return new NativeAdapter(config);
229
- }
230
- //# sourceMappingURL=NativeAdapter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"NativeAdapter.js","sourceRoot":"","sources":["../../../../../src/adapters/native/NativeAdapter.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AASxE,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAsB5D;;GAEG;AACH,MAAM,OAAO,aAAa;IAQxB,YAAY,SAA8B,EAAE;QAPnC,SAAI,GAAG,QAAQ,CAAC;QAEjB,UAAK,GAAmB,EAAE,CAAC;QAC3B,cAAS,GAAoB,EAAE,CAAC;QAChC,uBAAkB,GAA4B,EAAE,CAAC;QAIvD,IAAI,CAAC,MAAM,GAAG;YACZ,kBAAkB,EAAE,IAAI;YACxB,GAAG,MAAM;SACV,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU;QACd,6CAA6C;IAC/C,CAAC;IAED,aAAa,CAAC,KAAqB;QACjC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,iBAAiB,CAAC,SAA0B;QAC1C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,eAAe,CAAC,QAA+B;QAC7C,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;QAClF,CAAC,CAAC;IACJ,CAAC;IAEO,eAAe,CAAC,SAAwB;QAC9C,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;YACnC,IAAI,CAAC;gBACH,EAAE,CAAC,SAAS,CAAC,CAAC;YAChB,CAAC;YAAC,MAAM,CAAC;gBACP,yBAAyB;YAC3B,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,CAAC,eAAe;IAC9B,CAAC;IAED,OAAO;QACL,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IACtB,CAAC;IAED,MAAM,CAAC,KAAkB;QACvB,OAAO,CACL,oBAAC,iBAAiB,IAChB,OAAO,EAAE,IAAI,EACb,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,MAAM,EAAE,IAAI,CAAC,MAAM,KACf,KAAK,GACT,CACH,CAAC;IACJ,CAAC;CACF;AAWD,SAAS,iBAAiB,CAAC,EACzB,OAAO,EACP,KAAK,EACL,MAAM,EAAE,OAAO,EACf,GAAG,KAAK,EACe;IACvB,8CAA8C;IAC9C,KAAK,KAAK,CAAC;IACX,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAY,EAAE,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAE/B,yBAAyB;IACzB,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC;IAC3B,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ;;OAEG;IACH,MAAM,gBAAgB,GAAG,WAAW,CAAC,CAAC,KAAa,EAAoD,EAAE;QACvG,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,QAAQ,GAAwB,IAAI,CAAC;QACzC,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,MAAM,MAAM,GAAc,EAAE,CAAC;QAE7B,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACpC,IAAI,KAAK,GAAG,CAAC,CAAC;YAEd,iBAAiB;YACjB,IAAI,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAClD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACpC,IAAI,OAAO,OAAO,KAAK,QAAQ;wBAAE,SAAS;oBAC1C,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;oBAE3C,cAAc;oBACd,IAAI,YAAY,KAAK,UAAU,EAAE,CAAC;wBAChC,KAAK,IAAI,EAAE,CAAC;oBACd,CAAC;oBACD,oCAAoC;yBAC/B,IAAI,UAAU,CAAC,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;wBAC9E,KAAK,IAAI,EAAE,CAAC;wBACZ,uCAAuC;wBACvC,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;wBAC9D,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;wBACxD,IAAI,QAAQ,EAAE,CAAC;4BACb,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBACxB,CAAC;oBACH,CAAC;oBACD,gBAAgB;yBACX,IAAI,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;wBAChF,KAAK,IAAI,CAAC,CAAC;oBACb,CAAC;gBACH,CAAC;YACH,CAAC;YAED,oBAAoB;YACpB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;gBAClD,IAAI,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;oBACrC,KAAK,IAAI,CAAC,CAAC;gBACb,CAAC;YACH,CAAC;YAED,IAAI,KAAK,GAAG,SAAS,EAAE,CAAC;gBACtB,SAAS,GAAG,KAAK,CAAC;gBAClB,QAAQ,GAAG,IAAI,CAAC;YAClB,CAAC;QACH,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACpC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP;;OAEG;IACH,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,EAAE,IAAkB,EAAE,MAAiB,EAAkD,EAAE;QAC9H,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEzB,IAAI,CAAC;YACH,IAAI,MAAe,CAAC;YAEpB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;YACxC,CAAC;iBAAM,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC5C,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;YAC3D,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,IAAI,2BAA2B,CAAC,CAAC;YAChE,CAAC;YAED,MAAM,SAAS,GAAkB;gBAC/B,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,QAAQ,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,SAAS;gBACnD,IAAI,EAAE,MAAM,CAAC,MAAM,CAA0B,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7F,MAAM;gBACN,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,IAAI,IAAI,EAAE;gBACrB,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;gBAC5B,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;aACxC,CAAC;YAED,OAAe,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YAE5C,8BAA8B;YAC9B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC;gBACzE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAG,MAA8B,CAAC,OAAO,EAAE,CAAC;YAC7E,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,SAAS,GAAkB;gBAC/B,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,QAAQ,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,SAAS;gBACnD,IAAI,EAAE,MAAM,CAAC,MAAM,CAA0B,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7F,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChE,SAAS,EAAE,IAAI,IAAI,EAAE;gBACrB,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;gBAC5B,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;aACxC,CAAC;YAED,OAAe,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YAE5C,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,YAAY,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;aAC9E,CAAC;QACJ,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd;;OAEG;IACH,MAAM,iBAAiB,GAAG,WAAW,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QAC3D,mBAAmB;QACnB,MAAM,WAAW,GAAY;YAC3B,EAAE,EAAE,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE;YACxB,IAAI;YACJ,IAAI,EAAE,MAAM;YACZ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QACF,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;QAE5C,wBAAwB;QACxB,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAEhD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,mBAAmB;YACnB,MAAM,aAAa,GAAY;gBAC7B,EAAE,EAAE,UAAU,IAAI,CAAC,GAAG,EAAE,EAAE;gBAC1B,IAAI,EAAE,qCAAqC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAChI,IAAI,EAAE,QAAQ;gBACd,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC;YACF,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QAED,eAAe;QACf,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAE/C,uBAAuB;QACvB,MAAM,eAAe,GAAY;YAC/B,EAAE,EAAE,MAAM,IAAI,CAAC,GAAG,EAAE,EAAE;YACtB,IAAI,EAAE,MAAM,CAAC,OAAO;YACpB,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ;YACtC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QACF,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC;IAClD,CAAC,EAAE,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC,CAAC;IAEpC;;OAEG;IACH,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;QACvC,WAAW,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,oBAAC,UAAU,IACT,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,iBAAiB,EAChC,WAAW,EAAE,eAAe,GAC5B,CACH,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAA4B;IAC9D,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC"}
@@ -1,6 +0,0 @@
1
- /**
2
- * Native Adapter Exports
3
- */
4
- export { NativeAdapter, createNativeAdapter } from './NativeAdapter';
5
- export type { NativeAdapterConfig } from './NativeAdapter';
6
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/native/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACrE,YAAY,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -1,5 +0,0 @@
1
- /**
2
- * Native Adapter Exports
3
- */
4
- export { NativeAdapter, createNativeAdapter } from './NativeAdapter.js';
5
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/adapters/native/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -1,27 +0,0 @@
1
- /**
2
- * Persistent Chat Bubble Component
3
- *
4
- * Fixed position chat bubble in lower right corner that:
5
- * - Appears on every page
6
- * - Expands/collapses without blocking content
7
- * - Provides AI interface for tool execution
8
- */
9
- import React from 'react';
10
- interface Message {
11
- id: string;
12
- text: string;
13
- type: 'user' | 'ai' | 'system';
14
- timestamp: string;
15
- }
16
- interface ChatBubbleProps {
17
- messages: Message[];
18
- onSendMessage: (message: string) => void;
19
- onClearChat?: () => void;
20
- /** Storage key prefix for localStorage persistence. Default: 'chat-' */
21
- storagePrefix?: string;
22
- /** Title displayed in the chat header. Default: 'Chat' */
23
- title?: string;
24
- }
25
- export declare const ChatBubble: React.FC<ChatBubbleProps>;
26
- export {};
27
- //# sourceMappingURL=ChatBubble.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ChatBubble.d.ts","sourceRoot":"","sources":["../../../../../../src/ui/react/chat/ChatBubble.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAsC,MAAM,OAAO,CAAC;AAgB3D,UAAU,OAAO;IACf,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,QAAQ,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,eAAe;IACvB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,wEAAwE;IACxE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CA6RhD,CAAC"}
@@ -1,184 +0,0 @@
1
- /**
2
- * Persistent Chat Bubble Component
3
- *
4
- * Fixed position chat bubble in lower right corner that:
5
- * - Appears on every page
6
- * - Expands/collapses without blocking content
7
- * - Provides AI interface for tool execution
8
- */
9
- import React, { useState, useRef, useEffect } from 'react';
10
- import { Components } from '../../../../names/Components.js';
11
- // Chat component names (use the flat Components namespace)
12
- const ChatNames = {
13
- bubble: Components.ChatToggleButton,
14
- input: Components.ChatInput,
15
- sendButton: Components.ChatSendButton,
16
- clearButton: Components.ChatClearButton,
17
- };
18
- // Mock useChatInput for now - this should be injected via props or context
19
- const useChatInput = () => ({
20
- registerInput: (callback) => { }
21
- });
22
- export const ChatBubble = ({ messages, onSendMessage, onClearChat, storagePrefix = 'chat-', title = 'Chat', }) => {
23
- const CHAT_EXPANDED_KEY = `${storagePrefix}expanded`;
24
- // Initialize with default value (true) for both server and client to prevent hydration mismatch
25
- const [isExpanded, setIsExpanded] = useState(true);
26
- const [inputValue, setInputValue] = useState('');
27
- const [lastReadMessageCount, setLastReadMessageCount] = useState(0);
28
- const [showWelcome, setShowWelcome] = useState(messages.length === 0);
29
- const messagesEndRef = useRef(null);
30
- const inputRef = useRef(null);
31
- // Load expanded state from localStorage after hydration
32
- useEffect(() => {
33
- try {
34
- const stored = localStorage.getItem(CHAT_EXPANDED_KEY);
35
- if (stored !== null) {
36
- setIsExpanded(JSON.parse(stored));
37
- }
38
- }
39
- catch {
40
- // Keep default value
41
- }
42
- }, []);
43
- // Register with chat input context
44
- const { registerInput } = useChatInput();
45
- useEffect(() => {
46
- registerInput((text, submit = false) => {
47
- setInputValue(text);
48
- if (!isExpanded) {
49
- setIsExpanded(true);
50
- }
51
- // Auto-focus and submit if requested
52
- setTimeout(() => {
53
- inputRef.current?.focus();
54
- if (submit) {
55
- onSendMessage(text);
56
- setInputValue('');
57
- }
58
- }, 100);
59
- });
60
- }, [registerInput, onSendMessage, isExpanded]);
61
- // Track unread messages
62
- const unreadCount = Math.max(0, messages.length - lastReadMessageCount);
63
- const hasUnread = unreadCount > 0 && !isExpanded;
64
- useEffect(() => {
65
- if (isExpanded) {
66
- // Position at bottom without scrolling animation
67
- messagesEndRef.current?.scrollIntoView({ behavior: 'auto' });
68
- // Mark all messages as read when chat is expanded
69
- setLastReadMessageCount(messages.length);
70
- // Hide welcome if messages exist
71
- if (messages.length > 0) {
72
- setShowWelcome(false);
73
- }
74
- // Auto-focus input when expanded
75
- inputRef.current?.focus();
76
- }
77
- }, [messages, isExpanded]);
78
- // Auto-focus on mount
79
- useEffect(() => {
80
- if (isExpanded) {
81
- inputRef.current?.focus();
82
- }
83
- }, [isExpanded]);
84
- // Command+/ keyboard shortcut to focus input
85
- useEffect(() => {
86
- const handleKeyDown = (e) => {
87
- if ((e.metaKey || e.ctrlKey) && e.key === '/') {
88
- e.preventDefault();
89
- if (!isExpanded) {
90
- setIsExpanded(true);
91
- }
92
- inputRef.current?.focus();
93
- }
94
- };
95
- window.addEventListener('keydown', handleKeyDown);
96
- return () => window.removeEventListener('keydown', handleKeyDown);
97
- }, [isExpanded]);
98
- const handleSend = (e) => {
99
- e.preventDefault();
100
- if (!inputValue.trim())
101
- return;
102
- onSendMessage(inputValue.trim());
103
- setInputValue('');
104
- // Re-focus input after sending
105
- setTimeout(() => inputRef.current?.focus(), 0);
106
- };
107
- const handleToggle = () => {
108
- const newExpandedState = !isExpanded;
109
- setIsExpanded(newExpandedState);
110
- // Persist the expanded state to localStorage
111
- try {
112
- localStorage.setItem(CHAT_EXPANDED_KEY, JSON.stringify(newExpandedState));
113
- }
114
- catch (error) {
115
- console.error('Failed to save chat expanded state:', error);
116
- }
117
- };
118
- return (React.createElement(React.Fragment, null,
119
- React.createElement("div", { className: "fixed bottom-4 right-4 sm:bottom-6 sm:right-6 z-50" },
120
- isExpanded && (React.createElement("div", { className: "absolute bottom-16 right-0 w-[calc(100vw-2rem)] sm:w-[500px] lg:w-[600px] h-[calc(100vh-10rem)] sm:h-[600px] lg:h-[700px] bg-white rounded-lg shadow-2xl border border-gray-200 flex flex-col" },
121
- React.createElement("div", { className: "flex items-center justify-between p-3 sm:p-4 border-b border-gray-200 bg-gradient-to-r from-blue-50 to-purple-50 rounded-t-lg" },
122
- React.createElement("div", { className: "flex items-center space-x-2 sm:space-x-3" },
123
- React.createElement("div", { className: "relative" },
124
- React.createElement("div", { className: "w-8 h-8 sm:w-10 sm:h-10 bg-gradient-to-br from-blue-500 to-purple-600 rounded-full flex items-center justify-center" },
125
- React.createElement("span", { className: "text-white text-base sm:text-lg" }, "\uD83E\uDD16")),
126
- React.createElement("div", { className: "absolute -bottom-1 -right-1 w-3 h-3 sm:w-4 sm:h-4 bg-green-500 rounded-full border-2 border-white" })),
127
- React.createElement("div", null,
128
- React.createElement("h3", { className: "font-bold text-gray-900 text-sm sm:text-base" }, title),
129
- React.createElement("p", { className: "text-xs text-gray-600 hidden sm:block" }, "I'm a TOOL system AI can use to control this site"))),
130
- React.createElement("div", { className: "flex items-center space-x-1" },
131
- onClearChat && (React.createElement("button", { onClick: onClearChat, className: "p-1 text-gray-400 hover:text-gray-600 transition-colors", title: "Clear chat", "data-testid": ChatNames.clearButton },
132
- React.createElement("svg", { className: "w-4 h-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" },
133
- React.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16" })))),
134
- React.createElement("button", { onClick: handleToggle, className: "p-1 text-gray-400 hover:text-gray-600 transition-colors", title: "Minimize chat" },
135
- React.createElement("svg", { className: "w-4 h-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" },
136
- React.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" }))))),
137
- React.createElement("div", { className: "flex-1 overflow-y-auto p-3 sm:p-4 space-y-3" },
138
- showWelcome && messages.length === 0 && (React.createElement("div", { className: "bg-gradient-to-br from-blue-50 to-purple-50 p-3 sm:p-4 rounded-lg border border-blue-200 mb-4" },
139
- React.createElement("h4", { className: "font-bold text-gray-900 mb-2 text-xs sm:text-sm" }, "\uD83D\uDC4B Welcome! I'm NOT an AI"),
140
- React.createElement("p", { className: "text-xs text-gray-700 mb-3" },
141
- "I'm a ",
142
- React.createElement("strong", null, "tool system"),
143
- " that AI assistants (like Claude, GPT) can use to navigate and control this site. This enables ",
144
- React.createElement("strong", null, "agentic UX"),
145
- " \u2014 instead of clicking around, you tell an AI what you want, and it uses me to do it."),
146
- React.createElement("div", { className: "bg-white p-2 sm:p-3 rounded border border-gray-200 mb-3" },
147
- React.createElement("p", { className: "text-xs font-medium text-gray-900 mb-2" }, "Try these commands:"),
148
- React.createElement("div", { className: "space-y-1" }, [
149
- { text: 'open the docs', desc: 'Navigate to documentation' },
150
- { text: 'show me the story system', desc: 'View story system guide' },
151
- { text: 'go to examples', desc: 'Browse code examples' },
152
- ].map((cmd, idx) => (React.createElement("button", { key: idx, onClick: () => {
153
- setInputValue(cmd.text);
154
- setShowWelcome(false);
155
- setTimeout(() => inputRef.current?.focus(), 0);
156
- }, className: "w-full text-left px-2 py-1.5 rounded hover:bg-blue-50 transition-colors group" },
157
- React.createElement("div", { className: "text-xs font-mono text-blue-700 group-hover:text-blue-900" },
158
- "\"",
159
- cmd.text,
160
- "\""),
161
- React.createElement("div", { className: "text-xs text-gray-500 hidden sm:block" }, cmd.desc)))))),
162
- React.createElement("p", { className: "text-xs text-gray-600 italic" }, "Type a command or click a suggestion above to start"))),
163
- messages.map((message) => (React.createElement("div", { key: message.id, className: "flex flex-col" },
164
- React.createElement("div", { className: `inline-block px-3 py-2 rounded-lg max-w-[85%] sm:max-w-xs text-xs sm:text-sm ${message.type === 'user'
165
- ? 'bg-blue-600 text-white ml-auto'
166
- : message.type === 'ai'
167
- ? 'bg-gray-200 text-gray-800'
168
- : 'bg-yellow-100 text-yellow-800 text-xs'}`, "data-testid": `chat-message-${message.type}` }, message.text),
169
- React.createElement("div", { className: "text-xs text-gray-400 mt-1 px-1" }, typeof window !== 'undefined' ? new Date(message.timestamp).toLocaleTimeString() : '')))),
170
- React.createElement("div", { ref: messagesEndRef })),
171
- React.createElement("form", { onSubmit: handleSend, className: "p-3 sm:p-4 border-t border-gray-200" },
172
- React.createElement("div", { className: "flex space-x-2" },
173
- React.createElement("input", { ref: inputRef, type: "text", value: inputValue, onChange: (e) => setInputValue(e.target.value), placeholder: "Try: toggle notifications", className: "flex-1 px-3 py-2 text-xs sm:text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent text-gray-800", "data-testid": ChatNames.input }),
174
- React.createElement("button", { type: "submit", disabled: !inputValue.trim(), className: "px-3 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 disabled:bg-gray-300 disabled:cursor-not-allowed transition-colors text-xs sm:text-sm font-medium", "data-testid": ChatNames.sendButton }, "Execute")),
175
- React.createElement("div", { className: "mt-2 text-xs text-gray-500 hidden sm:block" },
176
- React.createElement("strong", null, "Demo:"),
177
- " Commands execute @Tool methods and update widgets above")))),
178
- React.createElement("button", { onClick: handleToggle, className: "absolute bottom-0 right-0 w-12 h-12 sm:w-14 sm:h-14 bg-blue-600 hover:bg-blue-700 text-white rounded-full shadow-lg transition-all duration-200 flex items-center justify-center", "data-testid": ChatNames.bubble, title: isExpanded ? 'Minimize chat' : 'Open AI chat' }, isExpanded ? (React.createElement("svg", { className: "w-5 h-5 sm:w-6 sm:h-6", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" },
179
- React.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" }))) : (React.createElement("svg", { className: "w-5 h-5 sm:w-6 sm:h-6", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" },
180
- React.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z" })))),
181
- hasUnread && (React.createElement("div", { className: "absolute -top-1 -right-1 w-4 h-4 sm:w-5 sm:h-5 bg-red-500 rounded-full flex items-center justify-center animate-pulse", "data-testid": "unread-indicator" },
182
- React.createElement("span", { className: "text-xs text-white font-bold" }, unreadCount > 9 ? '9+' : unreadCount))))));
183
- };
184
- //# sourceMappingURL=ChatBubble.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ChatBubble.js","sourceRoot":"","sources":["../../../../../../src/ui/react/chat/ChatBubble.tsx"],"names":[],"mappings":"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"}