guideai-app 0.5.4-2 → 0.5.4-8

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 (190) hide show
  1. package/README.md +105 -1
  2. package/dist/GuideAI.d.ts +2 -5
  3. package/dist/GuideAI.js +1 -1
  4. package/dist/GuideAI.js.LICENSE.txt +2 -17
  5. package/dist/buddy/buddyPropTools.d.ts +188 -0
  6. package/dist/buddy/buddyStore.d.ts +88 -0
  7. package/dist/buddy/buddyTools.d.ts +6 -0
  8. package/dist/buddy/types.d.ts +56 -0
  9. package/dist/components/DeveloperTools.d.ts +5 -3
  10. package/dist/components/Microphone.d.ts +17 -2
  11. package/dist/components/PlaybackLockDebugOverlayRoot.d.ts +1 -1
  12. package/dist/components/SessionRatingPopup.d.ts +16 -0
  13. package/dist/components/SubtitleInputBar.d.ts +23 -0
  14. package/dist/components/SubtitleSettingsMenu.d.ts +9 -0
  15. package/dist/components/TranscriptBox.d.ts +16 -12
  16. package/dist/components/TranscriptMessages.d.ts +8 -1
  17. package/dist/components/TranscriptNextStepBar.d.ts +34 -0
  18. package/dist/components/TranscriptSessionMicLevels.d.ts +8 -0
  19. package/dist/components/TranscriptStudioChrome.d.ts +8 -7
  20. package/dist/components/TranscriptTextInput.d.ts +4 -12
  21. package/dist/components/TranscriptToolbar.d.ts +3 -1
  22. package/dist/components/TranscriptWorkflowDrawer.d.ts +5 -7
  23. package/dist/contexts/GuideAIThemeContext.d.ts +13 -0
  24. package/dist/devtools/DeveloperToolsShell.d.ts +1 -1
  25. package/dist/devtools/TranscriptDeveloperToolsMenuItems.d.ts +45 -0
  26. package/dist/devtools/TranscriptUiDevtoolsPanel.d.ts +10 -0
  27. package/dist/devtools/adminToolDiagnostics/AdminToolDiagnosticsPanel.d.ts +1 -1
  28. package/dist/devtools/developerToolPanelId.d.ts +1 -1
  29. package/dist/devtools/devtoolsAdminPortalLinks.d.ts +11 -0
  30. package/dist/devtools/devtoolsAuth/DevtoolsAuthContext.d.ts +14 -0
  31. package/dist/devtools/devtoolsAuth/DevtoolsLoginModal.d.ts +13 -0
  32. package/dist/devtools/devtoolsAuth/devtoolsAccessTrigger.d.ts +9 -0
  33. package/dist/devtools/devtoolsAuth/devtoolsAdminApi.d.ts +13 -0
  34. package/dist/devtools/devtoolsAuth/devtoolsLoginModalStyles.d.ts +1 -0
  35. package/dist/devtools/devtoolsAuth/devtoolsPortalLogin.d.ts +15 -0
  36. package/dist/devtools/devtoolsAuth/devtoolsSessionStorage.d.ts +4 -0
  37. package/dist/devtools/devtoolsAuth/index.d.ts +9 -0
  38. package/dist/devtools/devtoolsAuth/types.d.ts +21 -0
  39. package/dist/devtools/devtoolsAuth/useDevtoolsAccess.d.ts +33 -0
  40. package/dist/devtools/devtoolsThemePreference.d.ts +3 -0
  41. package/dist/devtools/excavator/ExcavatorPanel.d.ts +17 -0
  42. package/dist/devtools/excavator/excavatorPanelStyles.d.ts +5 -0
  43. package/dist/devtools/excavator/excavatorSse.d.ts +6 -0
  44. package/dist/devtools/learn/LearnCaptureChrome.stub.d.ts +3 -0
  45. package/dist/devtools/learn/LearnModePanel.d.ts +18 -0
  46. package/dist/devtools/learn/LearnModePanel.stub.d.ts +3 -0
  47. package/dist/devtools/learn/LearnOrchestrationHost.d.ts +52 -0
  48. package/dist/devtools/learn/injectLearnModeStyles.d.ts +2 -0
  49. package/dist/devtools/learn/learnCaptureChrome.d.ts +33 -0
  50. package/dist/devtools/learn/learnCaptureLayout.d.ts +26 -0
  51. package/dist/devtools/learn/learnCaptureToolbar.d.ts +27 -0
  52. package/dist/devtools/learn/learnClarifyKickoff.d.ts +6 -0
  53. package/dist/devtools/learn/learnLiteTranscript.d.ts +22 -0
  54. package/dist/devtools/learn/learnModeStyles.d.ts +5 -0
  55. package/dist/devtools/learn/learnModeTypes.d.ts +5 -0
  56. package/dist/devtools/learn/learnOrchestrationStub.d.ts +5 -0
  57. package/dist/devtools/learn/learnPanelSyncFieldsEqual.d.ts +3 -0
  58. package/dist/devtools/learn/learnRealtimeSession.d.ts +10 -0
  59. package/dist/devtools/learn/learnRefBag.d.ts +41 -0
  60. package/dist/devtools/learn/learnSessionStorage.d.ts +23 -0
  61. package/dist/devtools/learn/learnWebRTCInit.d.ts +20 -0
  62. package/dist/devtools/learn/learnWorkspaceContext.d.ts +5 -0
  63. package/dist/devtools/learn/loadLearnOrchestration.d.ts +10 -0
  64. package/dist/devtools/learn/useLearnCaptureDuration.d.ts +4 -0
  65. package/dist/devtools/learn/useLearnClickCapture.d.ts +9 -0
  66. package/dist/devtools/learn/useLearnMode.d.ts +47 -0
  67. package/dist/devtools/learn/useLearnMode.stub.d.ts +3 -0
  68. package/dist/devtools/panelLayout.d.ts +6 -0
  69. package/dist/devtools/silentMessages/silentMessageDebug.d.ts +86 -0
  70. package/dist/devtools/silentMessages/useSilentMessageDebug.d.ts +18 -0
  71. package/dist/devtools/transcriptDevtoolsMenuProps.d.ts +33 -0
  72. package/dist/devtools/transcriptMoreMenu/DeveloperToolsAdminPortalFlyout.d.ts +20 -0
  73. package/dist/devtools/transcriptMoreMenu/DeveloperToolsLoggerFlyout.d.ts +16 -0
  74. package/dist/devtools/transcriptMoreMenu/DeveloperToolsMicPresetFlyout.d.ts +22 -0
  75. package/dist/devtools/transcriptMoreMenu/ThemePresetSwatch.d.ts +8 -0
  76. package/dist/devtools/transcriptMoreMenu/TranscriptDeveloperToolsMenuItems.d.ts +25 -0
  77. package/dist/devtools/transcriptMoreMenu/TranscriptDeveloperToolsThemeFlyout.d.ts +13 -0
  78. package/dist/devtools/transcriptMoreMenu/TranscriptMoreMenuDevtools.d.ts +27 -0
  79. package/dist/devtools/transcriptMoreMenu/devtoolsFlyoutTypes.d.ts +1 -0
  80. package/dist/devtools/transcriptMoreMenu/index.d.ts +2 -0
  81. package/dist/devtools/transcriptMoreMenu/readWindowGuideAILogger.d.ts +12 -0
  82. package/dist/devtools/transcriptMoreMenu/useTranscriptMoreMenuDebugFlyouts.d.ts +24 -0
  83. package/dist/devtools/useDraggableDialog.d.ts +8 -1
  84. package/dist/devtools/useGuideDeveloperTools.d.ts +16 -7
  85. package/dist/devtools/useGuideDevtoolsIntegration.d.ts +56 -0
  86. package/dist/devtools/workflowTester/WorkflowTesterPanel.d.ts +4 -28
  87. package/dist/devtools/workflowTester/WorkflowTesterPanel.stub.d.ts +3 -0
  88. package/dist/devtools/workflowTester/index.d.ts +1 -2
  89. package/dist/devtools/workflowTester/useWorkflowSimulationController.d.ts +12 -0
  90. package/dist/devtools/workflowTester/useWorkflowSimulationRun.d.ts +47 -0
  91. package/dist/devtools/workflowTester/workflowSimulationController.d.ts +31 -0
  92. package/dist/devtools/workflowTester/workflowSimulationDevtoolsApi.d.ts +51 -0
  93. package/dist/devtools/workflowTester/workflowSimulationFinishRun.d.ts +4 -0
  94. package/dist/devtools/workflowTester/workflowSimulationRunner.d.ts +46 -0
  95. package/dist/devtools/workflowTester/workflowSimulationRunnerAi.d.ts +20 -0
  96. package/dist/devtools/workflowTester/workflowSimulationSessionRestore.d.ts +21 -0
  97. package/dist/devtools/workflowTester/workflowSimulationTurnState.d.ts +20 -0
  98. package/dist/devtools/workflowTester/workflowSimulationTypes.d.ts +28 -0
  99. package/dist/devtools/workflowTester/workflowSimulationWaits.d.ts +55 -0
  100. package/dist/devtools/workflowTester/workflowTesterPanel.types.d.ts +25 -0
  101. package/dist/devtools/workflowTester/workflowTesterRunSessionStorage.d.ts +43 -0
  102. package/dist/devtools/workflowTester/workflowTesterWorkspaceBridge.d.ts +4 -2
  103. package/dist/hooks/useConversationSession.d.ts +16 -2
  104. package/dist/hooks/useGuideAIMutePipeline.d.ts +1 -0
  105. package/dist/hooks/useGuideAIThemeState.d.ts +6 -0
  106. package/dist/hooks/useHiddenRealtimeSteers.d.ts +3 -1
  107. package/dist/hooks/useLauncherTabDrag.d.ts +23 -0
  108. package/dist/hooks/useMicMute.d.ts +1 -0
  109. package/dist/hooks/useSessionRating.d.ts +21 -0
  110. package/dist/hooks/useSubtitleAppearancePrefs.d.ts +5 -0
  111. package/dist/hooks/useThemePortalProps.d.ts +4 -0
  112. package/dist/hooks/useTranscriptChrome.d.ts +7 -2
  113. package/dist/hooks/useTranscriptDisplayMode.d.ts +6 -0
  114. package/dist/hooks/useTranscriptPanelDragResize.d.ts +47 -0
  115. package/dist/hooks/useWebRTC.d.ts +9 -0
  116. package/dist/hooks/useWidgetWorkflowSession.d.ts +2 -0
  117. package/dist/hooks/useWorkflowTesterOverlay.d.ts +10 -10
  118. package/dist/hooks/useWorkspaceCatalog.d.ts +1 -0
  119. package/dist/index.d.ts +4 -1
  120. package/dist/lib/workspaceEmbedIcons.d.ts +0 -1
  121. package/dist/playwrightBuddyHarness.d.ts +12 -0
  122. package/dist/playwrightBuddyHarness.js +1766 -0
  123. package/dist/playwrightSimulationHarness.d.ts +16 -0
  124. package/dist/playwrightSimulationHarness.js +1 -0
  125. package/dist/playwrightToolHarness.d.ts +6 -2
  126. package/dist/playwrightToolHarness.js +1 -1
  127. package/dist/sessionRating.defaults.d.ts +4 -0
  128. package/dist/sessionRatingPrompts.d.ts +1 -0
  129. package/dist/staticContext/collectContext.d.ts +24 -13
  130. package/dist/staticContext/collectors/domSignals.d.ts +29 -0
  131. package/dist/staticContext/collectors/jqueryUi.d.ts +7 -0
  132. package/dist/staticContext/collectors/visibility.d.ts +6 -0
  133. package/dist/staticContext/hostPageFrameworkProbe.d.ts +21 -0
  134. package/dist/staticContext/index.d.ts +3 -2
  135. package/dist/staticContext/types.d.ts +112 -4
  136. package/dist/staticContext/useStaticContext.d.ts +5 -3
  137. package/dist/stubs/workspaces.d.ts +2 -2
  138. package/dist/styles/GuideAI.styles.d.ts +5 -1
  139. package/dist/styles/guideAIStylesTabLauncher.d.ts +7 -0
  140. package/dist/styles/guideAIThemeTokens.d.ts +5 -0
  141. package/dist/styles/guideaiTestsiteWidgetTheme.d.ts +6 -0
  142. package/dist/themes/buildThemeCss.d.ts +8 -0
  143. package/dist/themes/guideAIThemeIds.d.ts +5 -0
  144. package/dist/themes/presetThemes.d.ts +9 -0
  145. package/dist/themes/syncGuideAITheme.d.ts +2 -0
  146. package/dist/themes/themeTokens.types.d.ts +37 -0
  147. package/dist/types/GuideAI.types.d.ts +43 -4
  148. package/dist/utils/api.d.ts +39 -0
  149. package/dist/utils/api.learn.d.ts +18 -0
  150. package/dist/utils/conversationContextSwitch.d.ts +41 -0
  151. package/dist/utils/conversationManager.d.ts +39 -2
  152. package/dist/utils/dataChannel.d.ts +15 -0
  153. package/dist/utils/dataChannelHelpers.d.ts +26 -6
  154. package/dist/utils/guideaiMirroredStorageKeys.d.ts +35 -0
  155. package/dist/utils/lastSystemToolCall.d.ts +2 -1
  156. package/dist/utils/localStorageHelper.d.ts +52 -32
  157. package/dist/utils/localStorageThrottle.d.ts +6 -0
  158. package/dist/utils/messageStorage.d.ts +20 -7
  159. package/dist/utils/parseWorkspaceSlugList.d.ts +13 -0
  160. package/dist/utils/pathIncludesAnyRef.d.ts +12 -0
  161. package/dist/utils/resolveCatalogWorkspaceSlug.d.ts +11 -0
  162. package/dist/utils/sessionRatingThrottle.d.ts +3 -0
  163. package/dist/utils/sessionStorageJson.d.ts +3 -0
  164. package/dist/utils/themeRegistry.d.ts +14 -0
  165. package/dist/utils/tools/clickElement.d.ts +6 -0
  166. package/dist/utils/tools/cursorStyles.d.ts +17 -0
  167. package/dist/utils/tools/descriptionToHighlightSelector.d.ts +1 -1
  168. package/dist/utils/tools/docToForm.d.ts +2 -2
  169. package/dist/utils/tools/elementInteractions.d.ts +35 -1
  170. package/dist/utils/tools/elementToBestInteractionSelector.d.ts +8 -0
  171. package/dist/utils/tools/fillField.d.ts +1 -1
  172. package/dist/utils/tools/hover.d.ts +6 -0
  173. package/dist/utils/tools/selectWorkspace.d.ts +45 -0
  174. package/dist/utils/tools/toolRegistry.d.ts +5 -1
  175. package/dist/utils/tools/workspaceToolBridge.d.ts +22 -0
  176. package/dist/utils/transcriptDisplayModePref.d.ts +4 -0
  177. package/dist/utils/transcriptFloatGeometry.d.ts +78 -0
  178. package/dist/utils/transcriptSubtitleUiPref.d.ts +5 -0
  179. package/dist/utils/webrtcConnection.d.ts +7 -0
  180. package/dist/utils/widgetBearerStorage.d.ts +2 -2
  181. package/dist/utils/widgetWorkspaces.d.ts +0 -2
  182. package/dist/utils/workflowProgressSync.d.ts +65 -0
  183. package/dist/utils/workflowSteer.d.ts +10 -0
  184. package/dist/utils/workspaceCatalog.d.ts +20 -3
  185. package/dist/utils/workspaceCatalogFatal.d.ts +4 -0
  186. package/dist/visualContext/defaultProvider.d.ts +4 -10
  187. package/dist/visualContext/screenshotEncoding.d.ts +37 -0
  188. package/dist/visualContext/useVisualContext.d.ts +2 -1
  189. package/dist/visualContext/visualContextCaptureLock.d.ts +17 -0
  190. package/package.json +2 -2
@@ -0,0 +1,1766 @@
1
+ /******/ (() => { // webpackBootstrap
2
+ /******/ "use strict";
3
+ /******/ var __webpack_modules__ = ({
4
+
5
+ /***/ 983
6
+ /*!*************************************!*\
7
+ !*** ./src/buddy/buddyPropTools.ts ***!
8
+ \*************************************/
9
+ (__unused_webpack_module, exports, __webpack_require__) {
10
+
11
+
12
+ var __assign = (this && this.__assign) || function () {
13
+ __assign = Object.assign || function(t) {
14
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
15
+ s = arguments[i];
16
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
17
+ t[p] = s[p];
18
+ }
19
+ return t;
20
+ };
21
+ return __assign.apply(this, arguments);
22
+ };
23
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
24
+ exports.buddyPropTools = exports.BUDDY_TOOL_NAMES = void 0;
25
+ var buddyTools_1 = __webpack_require__(/*! ./buddyTools */ 552);
26
+ var actionProperty = {
27
+ type: 'string',
28
+ description: 'Operation to perform. See tool description for valid values.',
29
+ };
30
+ var userIdProperty = {
31
+ type: 'string',
32
+ description: 'Optional user scope override. Defaults to the signed-in widget user.',
33
+ };
34
+ exports.BUDDY_TOOL_NAMES = [
35
+ 'buddyTaskList',
36
+ 'buddyResearch',
37
+ 'buddyQuickie',
38
+ 'buddyMemory',
39
+ ];
40
+ exports.buddyPropTools = {
41
+ buddyTaskList: {
42
+ description: 'Manage the user task queue for everyday work. Actions: add (enqueue), list (optionally filter by status), getNext (current or next pending task), complete, update, remove.',
43
+ parameters: {
44
+ type: 'object',
45
+ properties: {
46
+ action: __assign(__assign({}, actionProperty), { enum: ['add', 'list', 'getNext', 'complete', 'update', 'remove'] }),
47
+ userId: userIdProperty,
48
+ title: { type: 'string', description: 'Task title (add/update).' },
49
+ description: { type: 'string', description: 'Task details (add/update).' },
50
+ taskId: { type: 'string', description: 'Task id (complete/update/remove).' },
51
+ status: {
52
+ type: 'string',
53
+ enum: ['pending', 'in_progress', 'completed', 'cancelled'],
54
+ description: 'Task status filter or update value.',
55
+ },
56
+ priority: {
57
+ type: 'string',
58
+ enum: ['low', 'normal', 'high'],
59
+ description: 'Task priority (add/update).',
60
+ },
61
+ },
62
+ required: ['action'],
63
+ },
64
+ execute: buddyTools_1.executeBuddyTaskList,
65
+ },
66
+ buddyResearch: {
67
+ description: 'Capture and retrieve research notes linked to everyday tasks. Actions: add, list (search by query or taskId), get (by noteId).',
68
+ parameters: {
69
+ type: 'object',
70
+ properties: {
71
+ action: __assign(__assign({}, actionProperty), { enum: ['add', 'list', 'get'] }),
72
+ userId: userIdProperty,
73
+ title: { type: 'string', description: 'Research title (add).' },
74
+ content: { type: 'string', description: 'Research body (add).' },
75
+ sources: {
76
+ type: 'array',
77
+ items: { type: 'string' },
78
+ description: 'URLs or citations (add).',
79
+ },
80
+ tags: {
81
+ type: 'array',
82
+ items: { type: 'string' },
83
+ description: 'Tags for retrieval (add).',
84
+ },
85
+ taskId: {
86
+ type: 'string',
87
+ description: 'Optional linked task id (add/list filter).',
88
+ },
89
+ noteId: { type: 'string', description: 'Research note id (get).' },
90
+ query: { type: 'string', description: 'Search text (list).' },
91
+ },
92
+ required: ['action'],
93
+ },
94
+ execute: buddyTools_1.executeBuddyResearch,
95
+ },
96
+ buddyQuickie: {
97
+ description: 'Save and replay small everyday automations (like Excel macros) from observed workflows. Actions: save, list, get, run, delete. A quickie is a named sequence of instruction or tool steps.',
98
+ parameters: {
99
+ type: 'object',
100
+ properties: {
101
+ action: __assign(__assign({}, actionProperty), { enum: ['save', 'list', 'get', 'run', 'delete'] }),
102
+ userId: userIdProperty,
103
+ quickieId: { type: 'string', description: 'Quickie id (get/run/delete/update).' },
104
+ name: { type: 'string', description: 'Short macro name (save).' },
105
+ description: {
106
+ type: 'string',
107
+ description: 'What this automation does (save).',
108
+ },
109
+ trigger: {
110
+ type: 'string',
111
+ description: 'When the user usually runs this (save), e.g. "every morning".',
112
+ },
113
+ steps: {
114
+ type: 'array',
115
+ description: 'Ordered steps. Each item: { kind: "instruction" | "tool", content: string }.',
116
+ items: {
117
+ type: 'object',
118
+ properties: {
119
+ kind: { type: 'string', enum: ['instruction', 'tool'] },
120
+ content: { type: 'string' },
121
+ },
122
+ required: ['kind', 'content'],
123
+ },
124
+ },
125
+ tags: {
126
+ type: 'array',
127
+ items: { type: 'string' },
128
+ description: 'Optional labels (save).',
129
+ },
130
+ },
131
+ required: ['action'],
132
+ },
133
+ execute: buddyTools_1.executeBuddyQuickie,
134
+ },
135
+ buddyMemory: {
136
+ description: 'Remember how the user organizes tasks, research, quickies, and their work style. Actions: get (full memory), search, setNote (key/value), appendOrganization, appendWorkStyle.',
137
+ parameters: {
138
+ type: 'object',
139
+ properties: {
140
+ action: __assign(__assign({}, actionProperty), { enum: ['get', 'search', 'setNote', 'appendOrganization', 'appendWorkStyle'] }),
141
+ userId: userIdProperty,
142
+ key: { type: 'string', description: 'Note key (setNote).' },
143
+ value: {
144
+ type: 'string',
145
+ description: 'Note value or list entry (setNote/append*).',
146
+ },
147
+ query: { type: 'string', description: 'Search filter (search).' },
148
+ },
149
+ required: ['action'],
150
+ },
151
+ execute: buddyTools_1.executeBuddyMemory,
152
+ },
153
+ };
154
+
155
+
156
+ /***/ },
157
+
158
+ /***/ 302
159
+ /*!*********************************!*\
160
+ !*** ./src/buddy/buddyStore.ts ***!
161
+ \*********************************/
162
+ (__unused_webpack_module, exports, __webpack_require__) {
163
+
164
+
165
+ var __assign = (this && this.__assign) || function () {
166
+ __assign = Object.assign || function(t) {
167
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
168
+ s = arguments[i];
169
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
170
+ t[p] = s[p];
171
+ }
172
+ return t;
173
+ };
174
+ return __assign.apply(this, arguments);
175
+ };
176
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
177
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
178
+ if (ar || !(i in from)) {
179
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
180
+ ar[i] = from[i];
181
+ }
182
+ }
183
+ return to.concat(ar || Array.prototype.slice.call(from));
184
+ };
185
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
186
+ exports.BUDDY_STATE_CHANGED_EVENT = void 0;
187
+ exports.resolveBuddyUserId = resolveBuddyUserId;
188
+ exports.readBuddyState = readBuddyState;
189
+ exports.writeBuddyState = writeBuddyState;
190
+ exports.addBuddyTask = addBuddyTask;
191
+ exports.listBuddyTasks = listBuddyTasks;
192
+ exports.getNextBuddyTask = getNextBuddyTask;
193
+ exports.updateBuddyTask = updateBuddyTask;
194
+ exports.completeBuddyTask = completeBuddyTask;
195
+ exports.removeBuddyTask = removeBuddyTask;
196
+ exports.addResearchNote = addResearchNote;
197
+ exports.listResearchNotes = listResearchNotes;
198
+ exports.getResearchNote = getResearchNote;
199
+ exports.saveQuickie = saveQuickie;
200
+ exports.listQuickies = listQuickies;
201
+ exports.getQuickie = getQuickie;
202
+ exports.runQuickie = runQuickie;
203
+ exports.deleteQuickie = deleteQuickie;
204
+ exports.getBuddyMemory = getBuddyMemory;
205
+ exports.setBuddyMemoryNote = setBuddyMemoryNote;
206
+ exports.appendBuddyMemoryList = appendBuddyMemoryList;
207
+ exports.searchBuddyMemory = searchBuddyMemory;
208
+ exports.clearBuddyState = clearBuddyState;
209
+ var types_1 = __webpack_require__(/*! ./types */ 958);
210
+ var localStorageHelper_1 = __webpack_require__(/*! ../utils/localStorageHelper */ 640);
211
+ var localStorageHelper_2 = __webpack_require__(/*! ../utils/localStorageHelper */ 640);
212
+ exports.BUDDY_STATE_CHANGED_EVENT = 'guideai_buddy_state_changed';
213
+ var BUDDY_STORAGE_PREFIX = 'guideAI_buddy_state_';
214
+ function storageKeyForUser(userId) {
215
+ return "".concat(BUDDY_STORAGE_PREFIX).concat(userId);
216
+ }
217
+ function newId(prefix) {
218
+ if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {
219
+ return "".concat(prefix, "_").concat(crypto.randomUUID());
220
+ }
221
+ return "".concat(prefix, "_").concat(Date.now(), "_").concat(Math.random().toString(36).slice(2, 9));
222
+ }
223
+ function nowIso() {
224
+ return new Date().toISOString();
225
+ }
226
+ function emitBuddyStateChanged(userId) {
227
+ if (typeof window === 'undefined')
228
+ return;
229
+ try {
230
+ window.dispatchEvent(new CustomEvent(exports.BUDDY_STATE_CHANGED_EVENT, { detail: { userId: userId } }));
231
+ }
232
+ catch (_a) {
233
+ /* ignore */
234
+ }
235
+ }
236
+ function emptyState(userId) {
237
+ return {
238
+ version: types_1.BUDDY_STATE_VERSION,
239
+ userId: userId,
240
+ tasks: [],
241
+ research: [],
242
+ quickies: [],
243
+ memory: __assign(__assign({}, types_1.EMPTY_BUDDY_MEMORY), { updatedAt: nowIso() }),
244
+ };
245
+ }
246
+ function parseState(raw, userId) {
247
+ var _a, _b, _c, _d;
248
+ try {
249
+ var parsed = JSON.parse(raw);
250
+ if (parsed.version !== types_1.BUDDY_STATE_VERSION)
251
+ return emptyState(userId);
252
+ return {
253
+ version: types_1.BUDDY_STATE_VERSION,
254
+ userId: userId,
255
+ tasks: Array.isArray(parsed.tasks) ? parsed.tasks : [],
256
+ research: Array.isArray(parsed.research) ? parsed.research : [],
257
+ quickies: Array.isArray(parsed.quickies) ? parsed.quickies : [],
258
+ memory: {
259
+ organization: Array.isArray((_a = parsed.memory) === null || _a === void 0 ? void 0 : _a.organization)
260
+ ? parsed.memory.organization.filter(function (v) { return typeof v === 'string'; })
261
+ : [],
262
+ workStyle: Array.isArray((_b = parsed.memory) === null || _b === void 0 ? void 0 : _b.workStyle)
263
+ ? parsed.memory.workStyle.filter(function (v) { return typeof v === 'string'; })
264
+ : [],
265
+ notes: ((_c = parsed.memory) === null || _c === void 0 ? void 0 : _c.notes) && typeof parsed.memory.notes === 'object'
266
+ ? Object.fromEntries(Object.entries(parsed.memory.notes).filter(function (_a) {
267
+ var k = _a[0], v = _a[1];
268
+ return typeof k === 'string' && typeof v === 'string';
269
+ }))
270
+ : {},
271
+ updatedAt: typeof ((_d = parsed.memory) === null || _d === void 0 ? void 0 : _d.updatedAt) === 'string' ? parsed.memory.updatedAt : nowIso(),
272
+ },
273
+ };
274
+ }
275
+ catch (_e) {
276
+ return emptyState(userId);
277
+ }
278
+ }
279
+ function resolveBuddyUserId(override) {
280
+ var trimmed = override === null || override === void 0 ? void 0 : override.trim();
281
+ if (trimmed)
282
+ return trimmed;
283
+ return (0, localStorageHelper_1.resolveWidgetEndUserId)();
284
+ }
285
+ function readBuddyState(userId) {
286
+ var id = resolveBuddyUserId(userId);
287
+ var raw = (0, localStorageHelper_2.safeReadLocal)(storageKeyForUser(id));
288
+ if (!raw)
289
+ return emptyState(id);
290
+ return parseState(raw, id);
291
+ }
292
+ function writeBuddyState(state) {
293
+ var next = __assign(__assign({}, state), { userId: state.userId.trim() || (0, localStorageHelper_1.resolveWidgetEndUserId)() });
294
+ (0, localStorageHelper_2.safeWriteLocal)(storageKeyForUser(next.userId), JSON.stringify(next));
295
+ emitBuddyStateChanged(next.userId);
296
+ return next;
297
+ }
298
+ function withState(userId, mutate) {
299
+ var current = readBuddyState(userId);
300
+ var _a = mutate(current), state = _a.state, result = _a.result;
301
+ writeBuddyState(state);
302
+ return result;
303
+ }
304
+ var TASK_STATUS_ORDER = {
305
+ in_progress: 0,
306
+ pending: 1,
307
+ completed: 2,
308
+ cancelled: 3,
309
+ };
310
+ var TASK_PRIORITY_ORDER = {
311
+ high: 0,
312
+ normal: 1,
313
+ low: 2,
314
+ };
315
+ function sortTasks(tasks) {
316
+ return __spreadArray([], tasks, true).sort(function (a, b) {
317
+ var statusDiff = TASK_STATUS_ORDER[a.status] - TASK_STATUS_ORDER[b.status];
318
+ if (statusDiff !== 0)
319
+ return statusDiff;
320
+ var priorityDiff = TASK_PRIORITY_ORDER[a.priority] - TASK_PRIORITY_ORDER[b.priority];
321
+ if (priorityDiff !== 0)
322
+ return priorityDiff;
323
+ return a.createdAt.localeCompare(b.createdAt);
324
+ });
325
+ }
326
+ function addBuddyTask(input) {
327
+ var title = input.title.trim();
328
+ if (!title)
329
+ throw new Error('Task title is required');
330
+ return withState(input.userId, function (state) {
331
+ var _a, _b, _c;
332
+ var ts = nowIso();
333
+ var task = {
334
+ id: newId('task'),
335
+ title: title,
336
+ description: ((_a = input.description) === null || _a === void 0 ? void 0 : _a.trim()) || undefined,
337
+ status: (_b = input.status) !== null && _b !== void 0 ? _b : 'pending',
338
+ priority: (_c = input.priority) !== null && _c !== void 0 ? _c : 'normal',
339
+ createdAt: ts,
340
+ updatedAt: ts,
341
+ };
342
+ return {
343
+ state: __assign(__assign({}, state), { tasks: sortTasks(__spreadArray(__spreadArray([], state.tasks, true), [task], false)) }),
344
+ result: task,
345
+ };
346
+ });
347
+ }
348
+ function listBuddyTasks(input) {
349
+ var tasks = sortTasks(readBuddyState(input === null || input === void 0 ? void 0 : input.userId).tasks);
350
+ if (!(input === null || input === void 0 ? void 0 : input.status))
351
+ return tasks;
352
+ return tasks.filter(function (t) { return t.status === input.status; });
353
+ }
354
+ function getNextBuddyTask(userId) {
355
+ var _a;
356
+ var tasks = listBuddyTasks({ status: 'in_progress', userId: userId });
357
+ if (tasks.length > 0)
358
+ return tasks[0];
359
+ var pending = listBuddyTasks({ status: 'pending', userId: userId });
360
+ return (_a = pending[0]) !== null && _a !== void 0 ? _a : null;
361
+ }
362
+ function updateBuddyTask(input) {
363
+ return withState(input.userId, function (state) {
364
+ var _a, _b, _c, _d;
365
+ var idx = state.tasks.findIndex(function (t) { return t.id === input.taskId; });
366
+ if (idx < 0)
367
+ throw new Error("Task not found: ".concat(input.taskId));
368
+ var existing = state.tasks[idx];
369
+ var ts = nowIso();
370
+ var nextStatus = (_a = input.status) !== null && _a !== void 0 ? _a : existing.status;
371
+ var completedAt = existing.completedAt;
372
+ if (nextStatus === 'completed') {
373
+ completedAt = existing.status === 'completed' ? ((_b = existing.completedAt) !== null && _b !== void 0 ? _b : ts) : ts;
374
+ }
375
+ else if (input.status !== undefined) {
376
+ completedAt = undefined;
377
+ }
378
+ var updated = __assign(__assign({}, existing), { title: ((_c = input.title) === null || _c === void 0 ? void 0 : _c.trim()) || existing.title, description: input.description !== undefined
379
+ ? input.description.trim() || undefined
380
+ : existing.description, status: nextStatus, priority: (_d = input.priority) !== null && _d !== void 0 ? _d : existing.priority, updatedAt: ts, completedAt: completedAt });
381
+ var tasks = __spreadArray([], state.tasks, true);
382
+ tasks[idx] = updated;
383
+ return { state: __assign(__assign({}, state), { tasks: sortTasks(tasks) }), result: updated };
384
+ });
385
+ }
386
+ function completeBuddyTask(input) {
387
+ return updateBuddyTask(__assign(__assign({}, input), { status: 'completed' }));
388
+ }
389
+ function removeBuddyTask(input) {
390
+ return withState(input.userId, function (state) {
391
+ var nextTasks = state.tasks.filter(function (t) { return t.id !== input.taskId; });
392
+ if (nextTasks.length === state.tasks.length) {
393
+ throw new Error("Task not found: ".concat(input.taskId));
394
+ }
395
+ return { state: __assign(__assign({}, state), { tasks: nextTasks }), result: true };
396
+ });
397
+ }
398
+ function addResearchNote(input) {
399
+ var title = input.title.trim();
400
+ var content = input.content.trim();
401
+ if (!title)
402
+ throw new Error('Research title is required');
403
+ if (!content)
404
+ throw new Error('Research content is required');
405
+ return withState(input.userId, function (state) {
406
+ var _a, _b, _c;
407
+ var ts = nowIso();
408
+ var note = {
409
+ id: newId('research'),
410
+ title: title,
411
+ content: content,
412
+ sources: (_a = input.sources) === null || _a === void 0 ? void 0 : _a.map(function (s) { return s.trim(); }).filter(Boolean),
413
+ tags: (_b = input.tags) === null || _b === void 0 ? void 0 : _b.map(function (s) { return s.trim(); }).filter(Boolean),
414
+ taskId: ((_c = input.taskId) === null || _c === void 0 ? void 0 : _c.trim()) || undefined,
415
+ createdAt: ts,
416
+ updatedAt: ts,
417
+ };
418
+ return {
419
+ state: __assign(__assign({}, state), { research: __spreadArray([note], state.research, true) }),
420
+ result: note,
421
+ };
422
+ });
423
+ }
424
+ function listResearchNotes(input) {
425
+ var _a;
426
+ var notes = readBuddyState(input === null || input === void 0 ? void 0 : input.userId).research;
427
+ if (input === null || input === void 0 ? void 0 : input.taskId) {
428
+ notes = notes.filter(function (n) { return n.taskId === input.taskId; });
429
+ }
430
+ var query = (_a = input === null || input === void 0 ? void 0 : input.query) === null || _a === void 0 ? void 0 : _a.trim().toLowerCase();
431
+ if (query) {
432
+ notes = notes.filter(function (n) {
433
+ var _a;
434
+ return n.title.toLowerCase().includes(query) ||
435
+ n.content.toLowerCase().includes(query) ||
436
+ ((_a = n.tags) !== null && _a !== void 0 ? _a : []).some(function (t) { return t.toLowerCase().includes(query); });
437
+ });
438
+ }
439
+ return notes;
440
+ }
441
+ function getResearchNote(input) {
442
+ var note = readBuddyState(input.userId).research.find(function (n) { return n.id === input.noteId; });
443
+ if (!note)
444
+ throw new Error("Research note not found: ".concat(input.noteId));
445
+ return note;
446
+ }
447
+ function saveQuickie(input) {
448
+ var name = input.name.trim();
449
+ if (!name)
450
+ throw new Error('Quickie name is required');
451
+ if (!input.steps.length)
452
+ throw new Error('Quickie must have at least one step');
453
+ return withState(input.userId, function (state) {
454
+ var _a, _b, _c, _d;
455
+ var ts = nowIso();
456
+ var existingIdx = input.quickieId
457
+ ? state.quickies.findIndex(function (q) { return q.id === input.quickieId; })
458
+ : -1;
459
+ var quickie = existingIdx >= 0
460
+ ? __assign(__assign({}, state.quickies[existingIdx]), { name: name, description: input.description.trim(), trigger: ((_a = input.trigger) === null || _a === void 0 ? void 0 : _a.trim()) || undefined, steps: input.steps, tags: (_b = input.tags) === null || _b === void 0 ? void 0 : _b.map(function (t) { return t.trim(); }).filter(Boolean), updatedAt: ts }) : {
461
+ id: newId('quickie'),
462
+ name: name,
463
+ description: input.description.trim(),
464
+ trigger: ((_c = input.trigger) === null || _c === void 0 ? void 0 : _c.trim()) || undefined,
465
+ steps: input.steps,
466
+ tags: (_d = input.tags) === null || _d === void 0 ? void 0 : _d.map(function (t) { return t.trim(); }).filter(Boolean),
467
+ usageCount: 0,
468
+ createdAt: ts,
469
+ updatedAt: ts,
470
+ };
471
+ var quickies = existingIdx >= 0
472
+ ? state.quickies.map(function (q, i) { return (i === existingIdx ? quickie : q); })
473
+ : __spreadArray([quickie], state.quickies, true);
474
+ return { state: __assign(__assign({}, state), { quickies: quickies }), result: quickie };
475
+ });
476
+ }
477
+ function listQuickies(userId) {
478
+ return readBuddyState(userId).quickies;
479
+ }
480
+ function getQuickie(input) {
481
+ var quickie = readBuddyState(input.userId).quickies.find(function (q) { return q.id === input.quickieId; });
482
+ if (!quickie)
483
+ throw new Error("Quickie not found: ".concat(input.quickieId));
484
+ return quickie;
485
+ }
486
+ function runQuickie(input) {
487
+ return withState(input.userId, function (state) {
488
+ var idx = state.quickies.findIndex(function (q) { return q.id === input.quickieId; });
489
+ if (idx < 0)
490
+ throw new Error("Quickie not found: ".concat(input.quickieId));
491
+ var ts = nowIso();
492
+ var quickie = __assign(__assign({}, state.quickies[idx]), { usageCount: state.quickies[idx].usageCount + 1, lastUsedAt: ts, updatedAt: ts });
493
+ var quickies = state.quickies.map(function (q, i) { return (i === idx ? quickie : q); });
494
+ return { state: __assign(__assign({}, state), { quickies: quickies }), result: quickie };
495
+ });
496
+ }
497
+ function deleteQuickie(input) {
498
+ return withState(input.userId, function (state) {
499
+ var next = state.quickies.filter(function (q) { return q.id !== input.quickieId; });
500
+ if (next.length === state.quickies.length) {
501
+ throw new Error("Quickie not found: ".concat(input.quickieId));
502
+ }
503
+ return { state: __assign(__assign({}, state), { quickies: next }), result: true };
504
+ });
505
+ }
506
+ function getBuddyMemory(userId) {
507
+ return readBuddyState(userId).memory;
508
+ }
509
+ function setBuddyMemoryNote(input) {
510
+ var key = input.key.trim();
511
+ if (!key)
512
+ throw new Error('Memory key is required');
513
+ return withState(input.userId, function (state) {
514
+ var _a;
515
+ var ts = nowIso();
516
+ var memory = __assign(__assign({}, state.memory), { notes: __assign(__assign({}, state.memory.notes), (_a = {}, _a[key] = input.value.trim(), _a)), updatedAt: ts });
517
+ return { state: __assign(__assign({}, state), { memory: memory }), result: memory };
518
+ });
519
+ }
520
+ function appendBuddyMemoryList(input) {
521
+ var value = input.value.trim();
522
+ if (!value)
523
+ throw new Error('Memory value is required');
524
+ return withState(input.userId, function (state) {
525
+ var _a;
526
+ var ts = nowIso();
527
+ var list = state.memory[input.category];
528
+ if (list.includes(value)) {
529
+ return { state: state, result: state.memory };
530
+ }
531
+ var memory = __assign(__assign({}, state.memory), (_a = {}, _a[input.category] = __spreadArray(__spreadArray([], list, true), [value], false), _a.updatedAt = ts, _a));
532
+ return { state: __assign(__assign({}, state), { memory: memory }), result: memory };
533
+ });
534
+ }
535
+ function searchBuddyMemory(input) {
536
+ var _a;
537
+ var memory = getBuddyMemory(input.userId);
538
+ var query = (_a = input.query) === null || _a === void 0 ? void 0 : _a.trim().toLowerCase();
539
+ if (!query)
540
+ return memory;
541
+ return __assign(__assign({}, memory), { organization: memory.organization.filter(function (v) { return v.toLowerCase().includes(query); }), workStyle: memory.workStyle.filter(function (v) { return v.toLowerCase().includes(query); }), notes: Object.fromEntries(Object.entries(memory.notes).filter(function (_a) {
542
+ var k = _a[0], v = _a[1];
543
+ return k.toLowerCase().includes(query) || v.toLowerCase().includes(query);
544
+ })) });
545
+ }
546
+ function clearBuddyState(userId) {
547
+ var id = resolveBuddyUserId(userId);
548
+ var state = emptyState(id);
549
+ writeBuddyState(state);
550
+ return state;
551
+ }
552
+
553
+
554
+ /***/ },
555
+
556
+ /***/ 552
557
+ /*!*********************************!*\
558
+ !*** ./src/buddy/buddyTools.ts ***!
559
+ \*********************************/
560
+ (__unused_webpack_module, exports, __webpack_require__) {
561
+
562
+
563
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
564
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
565
+ return new (P || (P = Promise))(function (resolve, reject) {
566
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
567
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
568
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
569
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
570
+ });
571
+ };
572
+ var __generator = (this && this.__generator) || function (thisArg, body) {
573
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
574
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
575
+ function verb(n) { return function (v) { return step([n, v]); }; }
576
+ function step(op) {
577
+ if (f) throw new TypeError("Generator is already executing.");
578
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
579
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
580
+ if (y = 0, t) op = [op[0] & 2, t.value];
581
+ switch (op[0]) {
582
+ case 0: case 1: t = op; break;
583
+ case 4: _.label++; return { value: op[1], done: false };
584
+ case 5: _.label++; y = op[1]; op = [0]; continue;
585
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
586
+ default:
587
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
588
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
589
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
590
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
591
+ if (t[2]) _.ops.pop();
592
+ _.trys.pop(); continue;
593
+ }
594
+ op = body.call(thisArg, _);
595
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
596
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
597
+ }
598
+ };
599
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
600
+ exports.executeBuddyTaskList = executeBuddyTaskList;
601
+ exports.executeBuddyResearch = executeBuddyResearch;
602
+ exports.executeBuddyQuickie = executeBuddyQuickie;
603
+ exports.executeBuddyMemory = executeBuddyMemory;
604
+ var buddyStore_1 = __webpack_require__(/*! ./buddyStore */ 302);
605
+ function asString(value) {
606
+ return typeof value === 'string' ? value : undefined;
607
+ }
608
+ function asStringArray(value) {
609
+ if (!Array.isArray(value))
610
+ return undefined;
611
+ return value.filter(function (v) { return typeof v === 'string'; });
612
+ }
613
+ function parseQuickieSteps(value) {
614
+ if (!Array.isArray(value))
615
+ return [];
616
+ return value
617
+ .map(function (step) {
618
+ if (!step || typeof step !== 'object')
619
+ return null;
620
+ var kind = step.kind;
621
+ var content = step.content;
622
+ if ((kind !== 'instruction' && kind !== 'tool') || typeof content !== 'string') {
623
+ return null;
624
+ }
625
+ return { kind: kind, content: content.trim() };
626
+ })
627
+ .filter(function (s) { return !!s && s.content.length > 0; });
628
+ }
629
+ function parseTaskStatus(value) {
630
+ if (value === 'pending' ||
631
+ value === 'in_progress' ||
632
+ value === 'completed' ||
633
+ value === 'cancelled') {
634
+ return value;
635
+ }
636
+ return undefined;
637
+ }
638
+ function parseTaskPriority(value) {
639
+ if (value === 'low' || value === 'normal' || value === 'high')
640
+ return value;
641
+ return undefined;
642
+ }
643
+ function executeBuddyTaskList(args) {
644
+ return __awaiter(this, void 0, void 0, function () {
645
+ var action, userId;
646
+ var _a, _b, _c, _d;
647
+ return __generator(this, function (_e) {
648
+ action = asString(args.action);
649
+ userId = asString(args.userId);
650
+ switch (action) {
651
+ case 'add':
652
+ return [2 /*return*/, (0, buddyStore_1.addBuddyTask)({
653
+ userId: userId,
654
+ title: (_a = asString(args.title)) !== null && _a !== void 0 ? _a : '',
655
+ description: asString(args.description),
656
+ priority: parseTaskPriority(args.priority),
657
+ status: parseTaskStatus(args.status),
658
+ })];
659
+ case 'list':
660
+ return [2 /*return*/, (0, buddyStore_1.listBuddyTasks)({ userId: userId, status: parseTaskStatus(args.status) })];
661
+ case 'getNext':
662
+ return [2 /*return*/, (0, buddyStore_1.getNextBuddyTask)(userId)];
663
+ case 'complete':
664
+ return [2 /*return*/, (0, buddyStore_1.completeBuddyTask)({
665
+ userId: userId,
666
+ taskId: (_b = asString(args.taskId)) !== null && _b !== void 0 ? _b : '',
667
+ })];
668
+ case 'update':
669
+ return [2 /*return*/, (0, buddyStore_1.updateBuddyTask)({
670
+ userId: userId,
671
+ taskId: (_c = asString(args.taskId)) !== null && _c !== void 0 ? _c : '',
672
+ title: asString(args.title),
673
+ description: asString(args.description),
674
+ status: parseTaskStatus(args.status),
675
+ priority: parseTaskPriority(args.priority),
676
+ })];
677
+ case 'remove':
678
+ return [2 /*return*/, (0, buddyStore_1.removeBuddyTask)({
679
+ userId: userId,
680
+ taskId: (_d = asString(args.taskId)) !== null && _d !== void 0 ? _d : '',
681
+ })];
682
+ default:
683
+ throw new Error("buddyTaskList: unknown action \"".concat(action, "\". Use add, list, getNext, complete, update, or remove."));
684
+ }
685
+ return [2 /*return*/];
686
+ });
687
+ });
688
+ }
689
+ function executeBuddyResearch(args) {
690
+ return __awaiter(this, void 0, void 0, function () {
691
+ var action, userId;
692
+ var _a, _b, _c;
693
+ return __generator(this, function (_d) {
694
+ action = asString(args.action);
695
+ userId = asString(args.userId);
696
+ switch (action) {
697
+ case 'add':
698
+ return [2 /*return*/, (0, buddyStore_1.addResearchNote)({
699
+ userId: userId,
700
+ title: (_a = asString(args.title)) !== null && _a !== void 0 ? _a : '',
701
+ content: (_b = asString(args.content)) !== null && _b !== void 0 ? _b : '',
702
+ sources: asStringArray(args.sources),
703
+ tags: asStringArray(args.tags),
704
+ taskId: asString(args.taskId),
705
+ })];
706
+ case 'list':
707
+ return [2 /*return*/, (0, buddyStore_1.listResearchNotes)({
708
+ userId: userId,
709
+ query: asString(args.query),
710
+ taskId: asString(args.taskId),
711
+ })];
712
+ case 'get':
713
+ return [2 /*return*/, (0, buddyStore_1.getResearchNote)({
714
+ userId: userId,
715
+ noteId: (_c = asString(args.noteId)) !== null && _c !== void 0 ? _c : '',
716
+ })];
717
+ default:
718
+ throw new Error("buddyResearch: unknown action \"".concat(action, "\". Use add, list, or get."));
719
+ }
720
+ return [2 /*return*/];
721
+ });
722
+ });
723
+ }
724
+ function executeBuddyQuickie(args) {
725
+ return __awaiter(this, void 0, void 0, function () {
726
+ var action, userId, quickie;
727
+ var _a, _b, _c, _d, _e;
728
+ return __generator(this, function (_f) {
729
+ action = asString(args.action);
730
+ userId = asString(args.userId);
731
+ switch (action) {
732
+ case 'save':
733
+ return [2 /*return*/, (0, buddyStore_1.saveQuickie)({
734
+ userId: userId,
735
+ quickieId: asString(args.quickieId),
736
+ name: (_a = asString(args.name)) !== null && _a !== void 0 ? _a : '',
737
+ description: (_b = asString(args.description)) !== null && _b !== void 0 ? _b : '',
738
+ trigger: asString(args.trigger),
739
+ steps: parseQuickieSteps(args.steps),
740
+ tags: asStringArray(args.tags),
741
+ })];
742
+ case 'list':
743
+ return [2 /*return*/, (0, buddyStore_1.listQuickies)(userId)];
744
+ case 'get':
745
+ return [2 /*return*/, (0, buddyStore_1.getQuickie)({
746
+ userId: userId,
747
+ quickieId: (_c = asString(args.quickieId)) !== null && _c !== void 0 ? _c : '',
748
+ })];
749
+ case 'run': {
750
+ quickie = (0, buddyStore_1.runQuickie)({
751
+ userId: userId,
752
+ quickieId: (_d = asString(args.quickieId)) !== null && _d !== void 0 ? _d : '',
753
+ });
754
+ return [2 /*return*/, {
755
+ quickie: quickie,
756
+ message: 'Execute each step in order. Tool steps are JSON like {"tool":"fillField","args":{...}}; instruction steps are natural-language guidance.',
757
+ }];
758
+ }
759
+ case 'delete':
760
+ return [2 /*return*/, (0, buddyStore_1.deleteQuickie)({
761
+ userId: userId,
762
+ quickieId: (_e = asString(args.quickieId)) !== null && _e !== void 0 ? _e : '',
763
+ })];
764
+ default:
765
+ throw new Error("buddyQuickie: unknown action \"".concat(action, "\". Use save, list, get, run, or delete."));
766
+ }
767
+ return [2 /*return*/];
768
+ });
769
+ });
770
+ }
771
+ function executeBuddyMemory(args) {
772
+ return __awaiter(this, void 0, void 0, function () {
773
+ var action, userId;
774
+ var _a, _b, _c, _d;
775
+ return __generator(this, function (_e) {
776
+ action = asString(args.action);
777
+ userId = asString(args.userId);
778
+ switch (action) {
779
+ case 'get':
780
+ return [2 /*return*/, (0, buddyStore_1.getBuddyMemory)(userId)];
781
+ case 'search':
782
+ return [2 /*return*/, (0, buddyStore_1.searchBuddyMemory)({ userId: userId, query: asString(args.query) })];
783
+ case 'setNote':
784
+ return [2 /*return*/, (0, buddyStore_1.setBuddyMemoryNote)({
785
+ userId: userId,
786
+ key: (_a = asString(args.key)) !== null && _a !== void 0 ? _a : '',
787
+ value: (_b = asString(args.value)) !== null && _b !== void 0 ? _b : '',
788
+ })];
789
+ case 'appendOrganization':
790
+ return [2 /*return*/, (0, buddyStore_1.appendBuddyMemoryList)({
791
+ userId: userId,
792
+ category: 'organization',
793
+ value: (_c = asString(args.value)) !== null && _c !== void 0 ? _c : '',
794
+ })];
795
+ case 'appendWorkStyle':
796
+ return [2 /*return*/, (0, buddyStore_1.appendBuddyMemoryList)({
797
+ userId: userId,
798
+ category: 'workStyle',
799
+ value: (_d = asString(args.value)) !== null && _d !== void 0 ? _d : '',
800
+ })];
801
+ default:
802
+ throw new Error("buddyMemory: unknown action \"".concat(action, "\". Use get, search, setNote, appendOrganization, or appendWorkStyle."));
803
+ }
804
+ return [2 /*return*/];
805
+ });
806
+ });
807
+ }
808
+
809
+
810
+ /***/ },
811
+
812
+ /***/ 958
813
+ /*!****************************!*\
814
+ !*** ./src/buddy/types.ts ***!
815
+ \****************************/
816
+ (__unused_webpack_module, exports) {
817
+
818
+
819
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
820
+ exports.EMPTY_BUDDY_MEMORY = exports.BUDDY_STATE_VERSION = void 0;
821
+ exports.BUDDY_STATE_VERSION = 1;
822
+ exports.EMPTY_BUDDY_MEMORY = {
823
+ organization: [],
824
+ workStyle: [],
825
+ notes: {},
826
+ updatedAt: new Date(0).toISOString(),
827
+ };
828
+
829
+
830
+ /***/ },
831
+
832
+ /***/ 737
833
+ /*!***************************************!*\
834
+ !*** ./src/playwrightBuddyHarness.ts ***!
835
+ \***************************************/
836
+ (__unused_webpack_module, exports, __webpack_require__) {
837
+
838
+
839
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
840
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
841
+ return new (P || (P = Promise))(function (resolve, reject) {
842
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
843
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
844
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
845
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
846
+ });
847
+ };
848
+ var __generator = (this && this.__generator) || function (thisArg, body) {
849
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
850
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
851
+ function verb(n) { return function (v) { return step([n, v]); }; }
852
+ function step(op) {
853
+ if (f) throw new TypeError("Generator is already executing.");
854
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
855
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
856
+ if (y = 0, t) op = [op[0] & 2, t.value];
857
+ switch (op[0]) {
858
+ case 0: case 1: t = op; break;
859
+ case 4: _.label++; return { value: op[1], done: false };
860
+ case 5: _.label++; y = op[1]; op = [0]; continue;
861
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
862
+ default:
863
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
864
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
865
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
866
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
867
+ if (t[2]) _.ops.pop();
868
+ _.trys.pop(); continue;
869
+ }
870
+ op = body.call(thisArg, _);
871
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
872
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
873
+ }
874
+ };
875
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
876
+ /**
877
+ * Browser bundle entry for Playwright: exposes buddy productivity tools on window
878
+ * so E2E tests run against real localStorage in a page context.
879
+ */
880
+ var buddyPropTools_1 = __webpack_require__(/*! ./buddy/buddyPropTools */ 983);
881
+ var buddyStore_1 = __webpack_require__(/*! ./buddy/buddyStore */ 302);
882
+ var toolMap = buddyPropTools_1.buddyPropTools;
883
+ window.__GUIDEAI_BUDDY__ = {
884
+ toolNames: Object.keys(buddyPropTools_1.buddyPropTools),
885
+ executeTool: function (name, argsJson) { return __awaiter(void 0, void 0, void 0, function () {
886
+ var tool, parsed;
887
+ return __generator(this, function (_a) {
888
+ tool = toolMap[name];
889
+ if (!tool)
890
+ throw new Error("Unknown buddy tool: ".concat(name));
891
+ try {
892
+ parsed = argsJson ? JSON.parse(argsJson) : {};
893
+ }
894
+ catch (_b) {
895
+ throw new Error("Invalid JSON args for ".concat(name));
896
+ }
897
+ return [2 /*return*/, tool.execute(parsed)];
898
+ });
899
+ }); },
900
+ readState: function (userId) { return (0, buddyStore_1.readBuddyState)(userId); },
901
+ clearState: function (userId) { return (0, buddyStore_1.clearBuddyState)(userId); },
902
+ };
903
+
904
+
905
+ /***/ },
906
+
907
+ /***/ 485
908
+ /*!*************************************************!*\
909
+ !*** ./src/utils/guideaiMirroredStorageKeys.ts ***!
910
+ \*************************************************/
911
+ (__unused_webpack_module, exports) {
912
+
913
+
914
+ /**
915
+ * Canonical GuideAI localStorage key strings.
916
+ * Imported by guide-ai-package helpers and the Chrome extension (UMD does not export STORAGE_KEYS).
917
+ */
918
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
919
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
920
+ if (ar || !(i in from)) {
921
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
922
+ ar[i] = from[i];
923
+ }
924
+ }
925
+ return to.concat(ar || Array.prototype.slice.call(from));
926
+ };
927
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
928
+ exports.GUIDEAI_MIRRORED_STORAGE_KEYS = exports.GUIDEAI_STORAGE_KEYS = exports.WIDGET_BEARER_TOKEN_STORAGE_KEY = void 0;
929
+ /** Widget Bearer JWT — mirrored; not part of transcript prefs. */
930
+ exports.WIDGET_BEARER_TOKEN_STORAGE_KEY = 'guideai_widgetBearerToken';
931
+ exports.GUIDEAI_STORAGE_KEYS = {
932
+ USER_UUID: 'guideAI_userUUID',
933
+ /** Persisted widget profile username (email or stable id); mirrored by the Chrome extension. */
934
+ WIDGET_PROFILE_USERNAME: 'guideAI_widgetProfileUsername',
935
+ SESSION_ID: 'guideAI_sessionId',
936
+ CONVERSATION: 'guideAI_conversation',
937
+ HAS_INTERACTED: 'guideAI_hasInteracted',
938
+ IS_MUTED: 'guideAI_isMuted',
939
+ /** Mute assistant TTS / remote audio (WebRTC playback); not the user microphone. */
940
+ ASSISTANT_PLAYBACK_MUTED: 'guideAI_assistantPlaybackMuted',
941
+ LOGGER_ENABLED: 'guideAI_loggerEnabled',
942
+ AUDIO_CONFIG: 'guideAI_audioConfig',
943
+ /** UI microphone preset selector (Precise vs Noisy). */
944
+ MIC_PRESET: 'guideAI_micPreset',
945
+ /** Developer tools shell: playback interrupt lock panel visibility (default off). */
946
+ PLAYBACK_LOCK_DEBUG_OVERLAY: 'guideAI_playbackLockDebugOverlay',
947
+ /** Developer tools shell: workflow tester tab overlay visibility (default off). */
948
+ WORKFLOW_TESTER_OVERLAY: 'guideAI_workflowTesterOverlay',
949
+ /** Last dragged position of the floating developer tools shell (`{ left, top }` JSON). */
950
+ DEVTOOLS_SHELL_POSITION: 'guideAI_devtoolsShellPosition',
951
+ /** Last dragged position of learn mode capture focus chrome (`{ left, top }` JSON). */
952
+ LEARN_CAPTURE_POSITION: 'guideAI_learnCapturePosition',
953
+ };
954
+ /**
955
+ * Keys mirrored from the widget to extension localStorage via `guideai_storage_write`.
956
+ */
957
+ exports.GUIDEAI_MIRRORED_STORAGE_KEYS = __spreadArray(__spreadArray([], Object.values(exports.GUIDEAI_STORAGE_KEYS), true), [
958
+ exports.WIDGET_BEARER_TOKEN_STORAGE_KEY,
959
+ ], false);
960
+
961
+
962
+ /***/ },
963
+
964
+ /***/ 640
965
+ /*!*****************************************!*\
966
+ !*** ./src/utils/localStorageHelper.ts ***!
967
+ \*****************************************/
968
+ (__unused_webpack_module, exports, __webpack_require__) {
969
+
970
+
971
+ var __importDefault = (this && this.__importDefault) || function (mod) {
972
+ return (mod && mod.__esModule) ? mod : { "default": mod };
973
+ };
974
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
975
+ exports.STORAGE_KEYS = exports.clearTranscriptWorkflowPrefs = exports.setTranscriptWorkflowWorkspaceState = exports.getTranscriptWorkflowWorkspaceState = exports.setLastWorkspaceSlugPref = exports.getLastWorkspaceSlugPref = exports.setTranscriptPanelDockedPref = exports.getTranscriptPanelDockedPref = exports.clearTranscriptFloatGeometryPref = exports.setTranscriptFloatGeometryPref = exports.getTranscriptFloatGeometryPref = exports.setTranscriptDrawerWidthPref = exports.getTranscriptDrawerWidthPref = exports.TRANSCRIPT_DRAWER_WIDTH_MAX_PX = exports.TRANSCRIPT_DRAWER_WIDTH_MIN_PX = exports.TRANSCRIPT_DRAWER_WIDTH_PX = exports.setLearnCapturePosition = exports.getLearnCapturePosition = exports.setDevtoolsShellPosition = exports.getDevtoolsShellPosition = exports.setWorkflowTesterOverlayVisible = exports.setPlaybackLockDebugOverlayVisible = exports.setMicPreset = exports.getMicPreset = exports.setAudioConfig = exports.getAudioConfig = exports.setLoggerEnabled = exports.getLoggerEnabled = exports.setAssistantPlaybackMuted = exports.getAssistantPlaybackMuted = exports.setIsMuted = exports.getIsMuted = exports.setHasInteracted = exports.getHasInteracted = exports.setSessionId = exports.getSessionId = exports.getWidgetProfileUsername = exports.getUserUUID = exports.isLocalStorageAvailable = void 0;
976
+ exports.emitStorageWrite = emitStorageWrite;
977
+ exports.safeReadLocal = safeReadLocal;
978
+ exports.safeWriteLocal = safeWriteLocal;
979
+ exports.safeRemoveLocal = safeRemoveLocal;
980
+ exports.writeMirroredLocal = writeMirroredLocal;
981
+ exports.resolveWidgetEndUserId = resolveWidgetEndUserId;
982
+ var logger_1 = __importDefault(__webpack_require__(/*! ./logger */ 628));
983
+ var guideaiMirroredStorageKeys_1 = __webpack_require__(/*! ./guideaiMirroredStorageKeys */ 485);
984
+ /**
985
+ * Centralized localStorage helper
986
+ * Tracks all localStorage keys used in the application
987
+ */
988
+ var STORAGE_KEYS = guideaiMirroredStorageKeys_1.GUIDEAI_STORAGE_KEYS;
989
+ exports.STORAGE_KEYS = STORAGE_KEYS;
990
+ /**
991
+ * Emit a custom event when localStorage is written, so the Chrome extension
992
+ * content script can mirror writes from the isolated GuideAI component.
993
+ * Exported for bespoke flows (for example conversation save + quota handling).
994
+ */
995
+ function emitStorageWrite(key, value) {
996
+ if (typeof window === 'undefined')
997
+ return;
998
+ try {
999
+ window.dispatchEvent(new CustomEvent('guideai_storage_write', { detail: { key: key, value: value } }));
1000
+ }
1001
+ catch (error) {
1002
+ logger_1.default.warn('LocalStorageHelper', 'Failed to emit storage write event', error);
1003
+ }
1004
+ }
1005
+ /**
1006
+ * Check if localStorage is available
1007
+ */
1008
+ var isLocalStorageAvailable = function () {
1009
+ try {
1010
+ if (typeof window === 'undefined')
1011
+ return false;
1012
+ var testKey = '__storage_test__';
1013
+ localStorage.setItem(testKey, testKey);
1014
+ localStorage.removeItem(testKey);
1015
+ return true;
1016
+ }
1017
+ catch (_e) {
1018
+ return false;
1019
+ }
1020
+ };
1021
+ exports.isLocalStorageAvailable = isLocalStorageAvailable;
1022
+ /**
1023
+ * Return `localStorage.getItem(key)` or `null` if localStorage is unavailable / throws
1024
+ * (SSR, private mode, quota errors). Prefer this over an ad-hoc `typeof localStorage` check.
1025
+ */
1026
+ function safeReadLocal(key) {
1027
+ if (typeof localStorage === 'undefined')
1028
+ return null;
1029
+ try {
1030
+ return localStorage.getItem(key);
1031
+ }
1032
+ catch (_a) {
1033
+ return null;
1034
+ }
1035
+ }
1036
+ /**
1037
+ * Best-effort `localStorage.setItem(key, value)`. Silently no-ops if localStorage is unavailable.
1038
+ * Does NOT emit the `guideai_storage_write` event — use the typed setters in this file for keys
1039
+ * the Chrome extension needs to mirror.
1040
+ */
1041
+ function safeWriteLocal(key, value) {
1042
+ if (typeof localStorage === 'undefined')
1043
+ return;
1044
+ try {
1045
+ localStorage.setItem(key, value);
1046
+ }
1047
+ catch (_a) {
1048
+ /* ignore */
1049
+ }
1050
+ }
1051
+ /** Best-effort removeItem. No-ops if localStorage is unavailable. */
1052
+ function safeRemoveLocal(key) {
1053
+ if (typeof localStorage === 'undefined')
1054
+ return;
1055
+ try {
1056
+ localStorage.removeItem(key);
1057
+ }
1058
+ catch (_a) {
1059
+ /* ignore */
1060
+ }
1061
+ }
1062
+ /**
1063
+ * setItem(key, value) if value is a string; removeItem(key) if value is null.
1064
+ * Emits the guideai_storage_write event for the final state (value or '').
1065
+ *
1066
+ * Use for keys the Chrome extension mirrors. Callers that need emit-on-set-only
1067
+ * can pass `{ emitOnClear: false }`.
1068
+ */
1069
+ function writeMirroredLocal(key, value, options) {
1070
+ if (options === void 0) { options = {}; }
1071
+ var _a = options.emitOnClear, emitOnClear = _a === void 0 ? true : _a;
1072
+ if (typeof localStorage === 'undefined')
1073
+ return;
1074
+ try {
1075
+ if (value === null) {
1076
+ localStorage.removeItem(key);
1077
+ if (emitOnClear)
1078
+ emitStorageWrite(key, '');
1079
+ }
1080
+ else {
1081
+ localStorage.setItem(key, value);
1082
+ emitStorageWrite(key, value);
1083
+ }
1084
+ }
1085
+ catch (_b) {
1086
+ /* ignore */
1087
+ }
1088
+ }
1089
+ var getBooleanPref = function (key) { return safeReadLocal(key) === 'true'; };
1090
+ var setBooleanPref = function (key, value) {
1091
+ writeMirroredLocal(key, value ? 'true' : null, { emitOnClear: false });
1092
+ };
1093
+ /**
1094
+ * Generate a UUID v4
1095
+ */
1096
+ var generateUUID = function () {
1097
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
1098
+ var r = (Math.random() * 16) | 0;
1099
+ var v = c === 'x' ? r : (r & 0x3) | 0x8;
1100
+ return v.toString(16);
1101
+ });
1102
+ };
1103
+ /**
1104
+ * Get or create user UUID
1105
+ * Creates a new UUID if one doesn't exist
1106
+ */
1107
+ var getUserUUID = function () {
1108
+ var existing = safeReadLocal(STORAGE_KEYS.USER_UUID);
1109
+ if (existing)
1110
+ return existing;
1111
+ var uuid = generateUUID();
1112
+ writeMirroredLocal(STORAGE_KEYS.USER_UUID, uuid);
1113
+ return uuid;
1114
+ };
1115
+ exports.getUserUUID = getUserUUID;
1116
+ /** Trimmed profile username from localStorage, or null if unset / blank. */
1117
+ var getWidgetProfileUsername = function () {
1118
+ var raw = safeReadLocal(STORAGE_KEYS.WIDGET_PROFILE_USERNAME);
1119
+ var t = typeof raw === 'string' ? raw.trim() : '';
1120
+ return t.length > 0 ? t : null;
1121
+ };
1122
+ exports.getWidgetProfileUsername = getWidgetProfileUsername;
1123
+ /**
1124
+ * Canonical end-user id for widget HTTP payloads (`user` on `/initialize`, `userId`
1125
+ * on `/widget/session`, `user` on logged messages): persisted **`guideAI_widgetProfileUsername`**
1126
+ * when present in localStorage (hosts should set **`STORAGE_KEYS.WIDGET_PROFILE_USERNAME`** and emit
1127
+ * **`guideai_storage_write`** for Chrome extension mirroring — see package README), otherwise the
1128
+ * stable anonymous id from {@link getUserUUID}. Host **`getUserInfo`** (GuideAI prop) also persists here.
1129
+ */
1130
+ function resolveWidgetEndUserId() {
1131
+ var profile = (0, exports.getWidgetProfileUsername)();
1132
+ if (profile)
1133
+ return profile;
1134
+ return (0, exports.getUserUUID)();
1135
+ }
1136
+ /**
1137
+ * Get session ID (active OpenAI session)
1138
+ */
1139
+ var getSessionId = function () { return safeReadLocal(STORAGE_KEYS.SESSION_ID); };
1140
+ exports.getSessionId = getSessionId;
1141
+ /**
1142
+ * Set session ID
1143
+ */
1144
+ var setSessionId = function (sessionId) {
1145
+ var key = STORAGE_KEYS.SESSION_ID;
1146
+ if (sessionId === null) {
1147
+ safeRemoveLocal(key);
1148
+ }
1149
+ else {
1150
+ safeWriteLocal(key, sessionId);
1151
+ }
1152
+ };
1153
+ exports.setSessionId = setSessionId;
1154
+ /**
1155
+ * Get has interacted flag
1156
+ */
1157
+ var getHasInteracted = function () { return getBooleanPref(STORAGE_KEYS.HAS_INTERACTED); };
1158
+ exports.getHasInteracted = getHasInteracted;
1159
+ /**
1160
+ * Set has interacted flag
1161
+ */
1162
+ var setHasInteracted = function (value) {
1163
+ setBooleanPref(STORAGE_KEYS.HAS_INTERACTED, value);
1164
+ };
1165
+ exports.setHasInteracted = setHasInteracted;
1166
+ /**
1167
+ * Get is muted flag
1168
+ */
1169
+ var getIsMuted = function () { return getBooleanPref(STORAGE_KEYS.IS_MUTED); };
1170
+ exports.getIsMuted = getIsMuted;
1171
+ /**
1172
+ * Set is muted flag
1173
+ */
1174
+ var setIsMuted = function (value) {
1175
+ setBooleanPref(STORAGE_KEYS.IS_MUTED, value);
1176
+ };
1177
+ exports.setIsMuted = setIsMuted;
1178
+ var getAssistantPlaybackMuted = function () {
1179
+ return getBooleanPref(STORAGE_KEYS.ASSISTANT_PLAYBACK_MUTED);
1180
+ };
1181
+ exports.getAssistantPlaybackMuted = getAssistantPlaybackMuted;
1182
+ var setAssistantPlaybackMuted = function (value) {
1183
+ setBooleanPref(STORAGE_KEYS.ASSISTANT_PLAYBACK_MUTED, value);
1184
+ };
1185
+ exports.setAssistantPlaybackMuted = setAssistantPlaybackMuted;
1186
+ /**
1187
+ * Get logger enabled flag (used by Logger to persist enable state)
1188
+ */
1189
+ var getLoggerEnabled = function () { return getBooleanPref(STORAGE_KEYS.LOGGER_ENABLED); };
1190
+ exports.getLoggerEnabled = getLoggerEnabled;
1191
+ /**
1192
+ * Set logger enabled flag
1193
+ */
1194
+ var setLoggerEnabled = function (value) {
1195
+ setBooleanPref(STORAGE_KEYS.LOGGER_ENABLED, value);
1196
+ };
1197
+ exports.setLoggerEnabled = setLoggerEnabled;
1198
+ /**
1199
+ * Get stored audio configuration
1200
+ */
1201
+ var getAudioConfig = function () {
1202
+ var raw = safeReadLocal(STORAGE_KEYS.AUDIO_CONFIG);
1203
+ if (!raw)
1204
+ return null;
1205
+ try {
1206
+ return JSON.parse(raw);
1207
+ }
1208
+ catch (error) {
1209
+ logger_1.default.error('LocalStorageHelper', 'Error parsing audio config:', error);
1210
+ return null;
1211
+ }
1212
+ };
1213
+ exports.getAudioConfig = getAudioConfig;
1214
+ /**
1215
+ * Save audio configuration
1216
+ */
1217
+ var setAudioConfig = function (value) {
1218
+ writeMirroredLocal(STORAGE_KEYS.AUDIO_CONFIG, value ? JSON.stringify(value) : null, {
1219
+ emitOnClear: false,
1220
+ });
1221
+ };
1222
+ exports.setAudioConfig = setAudioConfig;
1223
+ /** Default mic preset is Precise. */
1224
+ var getMicPreset = function () {
1225
+ var v = safeReadLocal(STORAGE_KEYS.MIC_PRESET);
1226
+ return v === 'noisy' ? 'noisy' : 'precise';
1227
+ };
1228
+ exports.getMicPreset = getMicPreset;
1229
+ var setMicPreset = function (preset) {
1230
+ writeMirroredLocal(STORAGE_KEYS.MIC_PRESET, preset === 'precise' ? null : preset);
1231
+ };
1232
+ exports.setMicPreset = setMicPreset;
1233
+ /** Mirrored flag for playback-lock debug tab (developer tools shell / extension). */
1234
+ var setPlaybackLockDebugOverlayVisible = function (visible) {
1235
+ writeMirroredLocal(STORAGE_KEYS.PLAYBACK_LOCK_DEBUG_OVERLAY, visible ? 'true' : null);
1236
+ };
1237
+ exports.setPlaybackLockDebugOverlayVisible = setPlaybackLockDebugOverlayVisible;
1238
+ /** Mirrored flag for workflow tester tab (developer tools shell / extension). */
1239
+ var setWorkflowTesterOverlayVisible = function (visible) {
1240
+ writeMirroredLocal(STORAGE_KEYS.WORKFLOW_TESTER_OVERLAY, visible ? 'true' : null);
1241
+ };
1242
+ exports.setWorkflowTesterOverlayVisible = setWorkflowTesterOverlayVisible;
1243
+ var getDevtoolsShellPosition = function () {
1244
+ var raw = safeReadLocal(STORAGE_KEYS.DEVTOOLS_SHELL_POSITION);
1245
+ if (!raw)
1246
+ return null;
1247
+ try {
1248
+ var parsed = JSON.parse(raw);
1249
+ if (typeof parsed.left !== 'number' || typeof parsed.top !== 'number')
1250
+ return null;
1251
+ if (!Number.isFinite(parsed.left) || !Number.isFinite(parsed.top))
1252
+ return null;
1253
+ return { left: parsed.left, top: parsed.top };
1254
+ }
1255
+ catch (_a) {
1256
+ return null;
1257
+ }
1258
+ };
1259
+ exports.getDevtoolsShellPosition = getDevtoolsShellPosition;
1260
+ var setDevtoolsShellPosition = function (position) {
1261
+ writeMirroredLocal(STORAGE_KEYS.DEVTOOLS_SHELL_POSITION, JSON.stringify({ left: position.left, top: position.top }));
1262
+ };
1263
+ exports.setDevtoolsShellPosition = setDevtoolsShellPosition;
1264
+ var getLearnCapturePosition = function () {
1265
+ var raw = safeReadLocal(STORAGE_KEYS.LEARN_CAPTURE_POSITION);
1266
+ if (!raw)
1267
+ return null;
1268
+ try {
1269
+ var parsed = JSON.parse(raw);
1270
+ if (typeof parsed.left !== 'number' || typeof parsed.top !== 'number')
1271
+ return null;
1272
+ if (!Number.isFinite(parsed.left) || !Number.isFinite(parsed.top))
1273
+ return null;
1274
+ return { left: parsed.left, top: parsed.top };
1275
+ }
1276
+ catch (_a) {
1277
+ return null;
1278
+ }
1279
+ };
1280
+ exports.getLearnCapturePosition = getLearnCapturePosition;
1281
+ var setLearnCapturePosition = function (position) {
1282
+ writeMirroredLocal(STORAGE_KEYS.LEARN_CAPTURE_POSITION, JSON.stringify({ left: position.left, top: position.top }));
1283
+ };
1284
+ exports.setLearnCapturePosition = setLearnCapturePosition;
1285
+ /** Default docked drawer width (px). */
1286
+ exports.TRANSCRIPT_DRAWER_WIDTH_PX = 420;
1287
+ exports.TRANSCRIPT_DRAWER_WIDTH_MIN_PX = 260;
1288
+ exports.TRANSCRIPT_DRAWER_WIDTH_MAX_PX = 720;
1289
+ var transcriptDrawerPrefStorageKey = function (widgetKey) {
1290
+ return "guideAI_transcriptDrawerPref:".concat(widgetKey);
1291
+ };
1292
+ var transcriptDrawerWidthStorageKey = function (widgetKey) {
1293
+ return "guideAI_transcriptDrawerWidth:".concat(widgetKey);
1294
+ };
1295
+ function clampDrawerWidthPx(n) {
1296
+ if (!Number.isFinite(n))
1297
+ return exports.TRANSCRIPT_DRAWER_WIDTH_PX;
1298
+ return Math.round(Math.min(exports.TRANSCRIPT_DRAWER_WIDTH_MAX_PX, Math.max(exports.TRANSCRIPT_DRAWER_WIDTH_MIN_PX, n)));
1299
+ }
1300
+ /** User-resizable docked drawer width (px), per widget key. */
1301
+ var getTranscriptDrawerWidthPref = function (widgetKey) {
1302
+ var raw = safeReadLocal(transcriptDrawerWidthStorageKey(widgetKey));
1303
+ if (raw == null || raw === '')
1304
+ return exports.TRANSCRIPT_DRAWER_WIDTH_PX;
1305
+ return clampDrawerWidthPx(parseInt(raw, 10));
1306
+ };
1307
+ exports.getTranscriptDrawerWidthPref = getTranscriptDrawerWidthPref;
1308
+ var setTranscriptDrawerWidthPref = function (widgetKey, widthPx) {
1309
+ var key = transcriptDrawerWidthStorageKey(widgetKey);
1310
+ writeMirroredLocal(key, String(clampDrawerWidthPx(widthPx)));
1311
+ };
1312
+ exports.setTranscriptDrawerWidthPref = setTranscriptDrawerWidthPref;
1313
+ var transcriptFloatGeometryStorageKey = function (widgetKey) {
1314
+ return "guideAI_transcriptFloatGeometry:".concat(widgetKey);
1315
+ };
1316
+ var FLOAT_WIDTH_MIN_PX = 240;
1317
+ var FLOAT_WIDTH_MAX_PX = 560;
1318
+ var FLOAT_CORE_H_MIN_PX = 180;
1319
+ var FLOAT_CORE_H_MAX_PX = 560;
1320
+ function clampFloatDimension(n, min, max) {
1321
+ return Math.round(Math.min(max, Math.max(min, n)));
1322
+ }
1323
+ var getTranscriptFloatGeometryPref = function (widgetKey) {
1324
+ var raw = safeReadLocal(transcriptFloatGeometryStorageKey(widgetKey));
1325
+ if (!raw)
1326
+ return null;
1327
+ try {
1328
+ var parsed = JSON.parse(raw);
1329
+ var left = parsed.left, bottom = parsed.bottom, width = parsed.width, coreH = parsed.coreH;
1330
+ if (typeof left !== 'number' ||
1331
+ typeof bottom !== 'number' ||
1332
+ typeof width !== 'number' ||
1333
+ typeof coreH !== 'number' ||
1334
+ !Number.isFinite(left) ||
1335
+ !Number.isFinite(bottom) ||
1336
+ !Number.isFinite(width) ||
1337
+ !Number.isFinite(coreH)) {
1338
+ return null;
1339
+ }
1340
+ return {
1341
+ left: Math.round(left),
1342
+ bottom: Math.round(bottom),
1343
+ width: clampFloatDimension(width, FLOAT_WIDTH_MIN_PX, FLOAT_WIDTH_MAX_PX),
1344
+ coreH: clampFloatDimension(coreH, FLOAT_CORE_H_MIN_PX, FLOAT_CORE_H_MAX_PX),
1345
+ };
1346
+ }
1347
+ catch (_a) {
1348
+ return null;
1349
+ }
1350
+ };
1351
+ exports.getTranscriptFloatGeometryPref = getTranscriptFloatGeometryPref;
1352
+ var setTranscriptFloatGeometryPref = function (widgetKey, geometry) {
1353
+ var key = transcriptFloatGeometryStorageKey(widgetKey);
1354
+ writeMirroredLocal(key, JSON.stringify({
1355
+ left: Math.round(geometry.left),
1356
+ bottom: Math.round(geometry.bottom),
1357
+ width: clampFloatDimension(geometry.width, FLOAT_WIDTH_MIN_PX, FLOAT_WIDTH_MAX_PX),
1358
+ coreH: clampFloatDimension(geometry.coreH, FLOAT_CORE_H_MIN_PX, FLOAT_CORE_H_MAX_PX),
1359
+ }));
1360
+ };
1361
+ exports.setTranscriptFloatGeometryPref = setTranscriptFloatGeometryPref;
1362
+ var clearTranscriptFloatGeometryPref = function (widgetKey) {
1363
+ writeMirroredLocal(transcriptFloatGeometryStorageKey(widgetKey), null);
1364
+ };
1365
+ exports.clearTranscriptFloatGeometryPref = clearTranscriptFloatGeometryPref;
1366
+ /**
1367
+ * Whether the user prefers the docked transcript panel when the transcript is visible (per widget key).
1368
+ * Storage key remains `guideAI_transcriptDrawerPref:*` for backward compatibility.
1369
+ */
1370
+ var getTranscriptPanelDockedPref = function (widgetKey) {
1371
+ return safeReadLocal(transcriptDrawerPrefStorageKey(widgetKey)) === '1';
1372
+ };
1373
+ exports.getTranscriptPanelDockedPref = getTranscriptPanelDockedPref;
1374
+ var setTranscriptPanelDockedPref = function (widgetKey, docked) {
1375
+ var key = transcriptDrawerPrefStorageKey(widgetKey);
1376
+ writeMirroredLocal(key, docked ? '1' : '0');
1377
+ };
1378
+ exports.setTranscriptPanelDockedPref = setTranscriptPanelDockedPref;
1379
+ /**
1380
+ * Last workspace slug the user selected in the in-widget transcript selector, scoped per
1381
+ * conversation/widget key. Used to keep the selection sticky across page reloads. Cleared
1382
+ * when the conversation ends (see `useConversationSession.endConversationSession`) so a
1383
+ * brand-new thread falls back to the host-default workspace resolution.
1384
+ *
1385
+ * The persisted slug is only re-applied when it still appears in the freshly fetched
1386
+ * workspace catalog; consumers must validate before using.
1387
+ */
1388
+ var lastWorkspaceSlugStorageKey = function (widgetKey) { return "guideAI_lastWorkspaceSlug:".concat(widgetKey); };
1389
+ var getLastWorkspaceSlugPref = function (widgetKey) {
1390
+ var raw = safeReadLocal(lastWorkspaceSlugStorageKey(widgetKey));
1391
+ var trimmed = typeof raw === 'string' ? raw.trim() : '';
1392
+ return trimmed.length > 0 ? trimmed : null;
1393
+ };
1394
+ exports.getLastWorkspaceSlugPref = getLastWorkspaceSlugPref;
1395
+ var setLastWorkspaceSlugPref = function (widgetKey, slug) {
1396
+ var key = lastWorkspaceSlugStorageKey(widgetKey);
1397
+ var trimmed = typeof slug === 'string' ? slug.trim() : '';
1398
+ writeMirroredLocal(key, trimmed.length > 0 ? trimmed : null);
1399
+ };
1400
+ exports.setLastWorkspaceSlugPref = setLastWorkspaceSlugPref;
1401
+ var transcriptWorkflowStateStorageKey = function (conversationKey) {
1402
+ return "guideAI_transcriptWorkflowState:".concat(conversationKey);
1403
+ };
1404
+ function readTranscriptWorkflowStateBlob(conversationKey) {
1405
+ var raw = safeReadLocal(transcriptWorkflowStateStorageKey(conversationKey));
1406
+ if (!raw)
1407
+ return {};
1408
+ try {
1409
+ var parsed = JSON.parse(raw);
1410
+ return parsed && typeof parsed === 'object' ? parsed : {};
1411
+ }
1412
+ catch (_a) {
1413
+ return {};
1414
+ }
1415
+ }
1416
+ var getTranscriptWorkflowWorkspaceState = function (conversationKey, workspaceSlug) {
1417
+ var slug = workspaceSlug.trim();
1418
+ if (!slug)
1419
+ return null;
1420
+ var blob = readTranscriptWorkflowStateBlob(conversationKey);
1421
+ var row = blob[slug];
1422
+ if (!row || typeof row !== 'object')
1423
+ return null;
1424
+ var id = typeof row.sessionWorkflowId === 'string' ? row.sessionWorkflowId.trim() : '';
1425
+ return {
1426
+ sessionWorkflowId: id.length > 0 ? id : null,
1427
+ activeWorkflowTitle: typeof row.activeWorkflowTitle === 'string' ? row.activeWorkflowTitle : null,
1428
+ workflowChecked: row.workflowChecked && typeof row.workflowChecked === 'object'
1429
+ ? row.workflowChecked
1430
+ : undefined,
1431
+ rollupWorkflows: row.rollupWorkflows === true,
1432
+ };
1433
+ };
1434
+ exports.getTranscriptWorkflowWorkspaceState = getTranscriptWorkflowWorkspaceState;
1435
+ var setTranscriptWorkflowWorkspaceState = function (conversationKey, workspaceSlug, state) {
1436
+ var slug = workspaceSlug.trim();
1437
+ if (!slug)
1438
+ return;
1439
+ var key = transcriptWorkflowStateStorageKey(conversationKey);
1440
+ var blob = readTranscriptWorkflowStateBlob(conversationKey);
1441
+ if (state == null) {
1442
+ delete blob[slug];
1443
+ }
1444
+ else {
1445
+ var id = typeof state.sessionWorkflowId === 'string' ? state.sessionWorkflowId.trim() : '';
1446
+ blob[slug] = {
1447
+ sessionWorkflowId: id.length > 0 ? id : null,
1448
+ activeWorkflowTitle: typeof state.activeWorkflowTitle === 'string' ? state.activeWorkflowTitle : null,
1449
+ workflowChecked: state.workflowChecked,
1450
+ rollupWorkflows: state.rollupWorkflows === true,
1451
+ };
1452
+ }
1453
+ var hasAny = Object.keys(blob).length > 0;
1454
+ writeMirroredLocal(key, hasAny ? JSON.stringify(blob) : null);
1455
+ };
1456
+ exports.setTranscriptWorkflowWorkspaceState = setTranscriptWorkflowWorkspaceState;
1457
+ /** Cleared when the conversation ends (same scope as last workspace slug). */
1458
+ var clearTranscriptWorkflowPrefs = function (conversationKey) {
1459
+ writeMirroredLocal(transcriptWorkflowStateStorageKey(conversationKey), null);
1460
+ };
1461
+ exports.clearTranscriptWorkflowPrefs = clearTranscriptWorkflowPrefs;
1462
+
1463
+
1464
+ /***/ },
1465
+
1466
+ /***/ 628
1467
+ /*!*****************************!*\
1468
+ !*** ./src/utils/logger.ts ***!
1469
+ \*****************************/
1470
+ (__unused_webpack_module, exports, __webpack_require__) {
1471
+
1472
+
1473
+ var __assign = (this && this.__assign) || function () {
1474
+ __assign = Object.assign || function(t) {
1475
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
1476
+ s = arguments[i];
1477
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
1478
+ t[p] = s[p];
1479
+ }
1480
+ return t;
1481
+ };
1482
+ return __assign.apply(this, arguments);
1483
+ };
1484
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
1485
+ exports.LOGGER_UI_COMPONENTS = void 0;
1486
+ /**
1487
+ * Standardized logging utility for GuideAI package
1488
+ * Provides consistent formatting and development gating across all components
1489
+ */
1490
+ var localStorageHelper_1 = __webpack_require__(/*! ./localStorageHelper */ 640);
1491
+ var LOG_LEVEL = 'log';
1492
+ var LEVELS = ['log', 'info', 'warn', 'error'];
1493
+ function shouldLog(requestedLevel) {
1494
+ var currentIndex = LEVELS.indexOf(LOG_LEVEL);
1495
+ var requestedIndex = LEVELS.indexOf(requestedLevel);
1496
+ return requestedIndex >= currentIndex;
1497
+ }
1498
+ /** Ordered list for debug UI and default flag initialization. */
1499
+ exports.LOGGER_UI_COMPONENTS = [
1500
+ 'GuideAI',
1501
+ 'API',
1502
+ 'TranscriptBox',
1503
+ 'Onboarding',
1504
+ 'VisualContext',
1505
+ 'StaticContext',
1506
+ 'MessageStorage',
1507
+ 'DataChannel',
1508
+ 'ConversationManager',
1509
+ 'LocalStorageHelper',
1510
+ 'WebRTCConnection',
1511
+ 'ToolCall',
1512
+ ];
1513
+ var ON_BY_DEFAULT = {
1514
+ DataChannel: true,
1515
+ LocalStorageHelper: true,
1516
+ WebRTCConnection: true,
1517
+ };
1518
+ var logging_enabled = Object.fromEntries(exports.LOGGER_UI_COMPONENTS.map(function (k) { return [k, Boolean(ON_BY_DEFAULT[k])]; }));
1519
+ // Manual override flag for console-based logging control
1520
+ var manualLoggingEnabled = false;
1521
+ var Logger = /** @class */ (function () {
1522
+ function Logger() {
1523
+ }
1524
+ Logger.formatMessage = function (component, action) {
1525
+ return "[GuideAI:".concat(component, "] ").concat(action);
1526
+ };
1527
+ Logger.checkLoggingEnabled = function (component, requestedLevel) {
1528
+ // Check manual override first, then fall back to development mode check
1529
+ var isManuallyEnabled = manualLoggingEnabled && logging_enabled[component] && shouldLog(requestedLevel);
1530
+ var isDevModeEnabled = true &&
1531
+ logging_enabled[component] &&
1532
+ shouldLog(requestedLevel);
1533
+ return isManuallyEnabled || isDevModeEnabled;
1534
+ };
1535
+ /**
1536
+ * Initialize logger and attach to window for console access
1537
+ * Call Logger.init() from browser console to enable logging.
1538
+ * Restores persisted enabled state from localStorage if previously enabled.
1539
+ */
1540
+ Logger.init = function () {
1541
+ if (typeof window !== 'undefined') {
1542
+ var win = window;
1543
+ if (!win.GuideAI)
1544
+ win.GuideAI = {};
1545
+ win.GuideAI.logger = Logger;
1546
+ if ((0, localStorageHelper_1.getLoggerEnabled)()) {
1547
+ manualLoggingEnabled = true;
1548
+ console.log('[GuideAI Logger] Initialized with logging enabled (restored from previous session).');
1549
+ }
1550
+ else {
1551
+ console.log('[GuideAI Logger] Initialized. Use GuideAI.logger.enable() to start logging.');
1552
+ }
1553
+ }
1554
+ };
1555
+ /**
1556
+ * Enable logging from console, or for a specific component.
1557
+ * Usage: GuideAI.logger.enable() or GuideAI.logger.enable('API')
1558
+ */
1559
+ Logger.enable = function (component) {
1560
+ if (component !== undefined) {
1561
+ manualLoggingEnabled = true;
1562
+ logging_enabled[component] = true;
1563
+ console.log("[GuideAI Logger] ".concat(component, " logging enabled"));
1564
+ }
1565
+ else {
1566
+ manualLoggingEnabled = true;
1567
+ (0, localStorageHelper_1.setLoggerEnabled)(true);
1568
+ console.log('[GuideAI Logger] Logging enabled');
1569
+ }
1570
+ };
1571
+ /**
1572
+ * Disable logging from console, or for a specific component.
1573
+ * Usage: GuideAI.logger.disable() or GuideAI.logger.disable('API')
1574
+ */
1575
+ Logger.disable = function (component) {
1576
+ if (component !== undefined) {
1577
+ logging_enabled[component] = false;
1578
+ console.log("[GuideAI Logger] ".concat(component, " logging disabled"));
1579
+ }
1580
+ else {
1581
+ manualLoggingEnabled = false;
1582
+ (0, localStorageHelper_1.setLoggerEnabled)(false);
1583
+ console.log('[GuideAI Logger] Logging disabled');
1584
+ }
1585
+ };
1586
+ /**
1587
+ * Enable or disable logging for a specific component
1588
+ * Usage: GuideAI.logger.setComponentEnabled('API', true)
1589
+ */
1590
+ Logger.setComponentEnabled = function (component, enabled) {
1591
+ logging_enabled[component] = enabled;
1592
+ console.log("[GuideAI Logger] ".concat(component, " logging ").concat(enabled ? 'enabled' : 'disabled'));
1593
+ };
1594
+ /**
1595
+ * Get current logging status
1596
+ * Usage: GuideAI.logger.getStatus()
1597
+ */
1598
+ Logger.getStatus = function () {
1599
+ return {
1600
+ manualEnabled: manualLoggingEnabled,
1601
+ components: __assign({}, logging_enabled),
1602
+ };
1603
+ };
1604
+ /**
1605
+ * Disable logging for all components
1606
+ * Usage: GuideAI.logger.disableAllComponents()
1607
+ */
1608
+ Logger.disableAllComponents = function () {
1609
+ exports.LOGGER_UI_COMPONENTS.forEach(function (component) {
1610
+ logging_enabled[component] = false;
1611
+ });
1612
+ console.log('[GuideAI Logger] All components disabled');
1613
+ };
1614
+ /**
1615
+ * Enable logging for all components
1616
+ * Usage: GuideAI.logger.enableAllComponents()
1617
+ */
1618
+ Logger.enableAllComponents = function () {
1619
+ exports.LOGGER_UI_COMPONENTS.forEach(function (component) {
1620
+ logging_enabled[component] = true;
1621
+ });
1622
+ console.log('[GuideAI Logger] All components enabled');
1623
+ };
1624
+ /**
1625
+ * Standard info logging - only in development
1626
+ */
1627
+ Logger.info = function (component, action, data) {
1628
+ if (this.checkLoggingEnabled(component, 'info')) {
1629
+ if (data !== undefined) {
1630
+ console.info(this.formatMessage(component, action), data);
1631
+ }
1632
+ else {
1633
+ console.info(this.formatMessage(component, action));
1634
+ }
1635
+ }
1636
+ };
1637
+ /**
1638
+ * Standard info logging - only in development
1639
+ */
1640
+ Logger.log = function (component, action, data) {
1641
+ if (this.checkLoggingEnabled(component, 'log')) {
1642
+ if (data !== undefined) {
1643
+ console.log(this.formatMessage(component, action), data);
1644
+ }
1645
+ else {
1646
+ console.log(this.formatMessage(component, action));
1647
+ }
1648
+ }
1649
+ };
1650
+ /**
1651
+ * Warning logging - always shown
1652
+ */
1653
+ Logger.warn = function (component, action, data) {
1654
+ if (this.checkLoggingEnabled(component, 'warn')) {
1655
+ if (data !== undefined) {
1656
+ console.warn(this.formatMessage(component, action), data);
1657
+ }
1658
+ else {
1659
+ console.warn(this.formatMessage(component, action));
1660
+ }
1661
+ }
1662
+ };
1663
+ /**
1664
+ * Error logging - always shown
1665
+ */
1666
+ Logger.error = function (component, action, error) {
1667
+ if (this.checkLoggingEnabled(component, 'error')) {
1668
+ if (error !== undefined) {
1669
+ console.error(this.formatMessage(component, action), error);
1670
+ }
1671
+ else {
1672
+ console.error(this.formatMessage(component, action));
1673
+ }
1674
+ }
1675
+ };
1676
+ /**
1677
+ * API call logging with method and endpoint
1678
+ */
1679
+ Logger.apiCall = function (method, endpoint, data) {
1680
+ if (this.checkLoggingEnabled('API', 'log')) {
1681
+ var action = "".concat(method, " ").concat(endpoint);
1682
+ if (data !== undefined) {
1683
+ console.log(this.formatMessage('API', action), data);
1684
+ }
1685
+ else {
1686
+ console.log(this.formatMessage('API', action));
1687
+ }
1688
+ }
1689
+ };
1690
+ /**
1691
+ * API response logging
1692
+ */
1693
+ Logger.apiResponse = function (method, endpoint, success, data) {
1694
+ if (this.checkLoggingEnabled('API', 'log')) {
1695
+ var status_1 = success ? '✅ SUCCESS' : '❌ FAILED';
1696
+ var action = "".concat(method, " ").concat(endpoint, " ").concat(status_1);
1697
+ if (data !== undefined) {
1698
+ console.log(this.formatMessage('API', action), data);
1699
+ }
1700
+ else {
1701
+ console.log(this.formatMessage('API', action));
1702
+ }
1703
+ }
1704
+ };
1705
+ /**
1706
+ * Conversation flow tracking
1707
+ */
1708
+ Logger.conversation = function (action, data) {
1709
+ if (this.checkLoggingEnabled('GuideAI', 'log')) {
1710
+ if (data !== undefined) {
1711
+ console.log(this.formatMessage('GuideAI', action), data);
1712
+ }
1713
+ else {
1714
+ console.log(this.formatMessage('GuideAI', action));
1715
+ }
1716
+ }
1717
+ };
1718
+ return Logger;
1719
+ }());
1720
+ exports["default"] = Logger;
1721
+
1722
+
1723
+ /***/ }
1724
+
1725
+ /******/ });
1726
+ /************************************************************************/
1727
+ /******/ // The module cache
1728
+ /******/ var __webpack_module_cache__ = {};
1729
+ /******/
1730
+ /******/ // The require function
1731
+ /******/ function __webpack_require__(moduleId) {
1732
+ /******/ // Check if module is in cache
1733
+ /******/ var cachedModule = __webpack_module_cache__[moduleId];
1734
+ /******/ if (cachedModule !== undefined) {
1735
+ /******/ return cachedModule.exports;
1736
+ /******/ }
1737
+ /******/ // Create a new module (and put it into the cache)
1738
+ /******/ var module = __webpack_module_cache__[moduleId] = {
1739
+ /******/ // no module.id needed
1740
+ /******/ // no module.loaded needed
1741
+ /******/ exports: {}
1742
+ /******/ };
1743
+ /******/
1744
+ /******/ // Execute the module function
1745
+ /******/ if (!(moduleId in __webpack_modules__)) {
1746
+ /******/ delete __webpack_module_cache__[moduleId];
1747
+ /******/ var e = new Error("Cannot find module '" + moduleId + "'");
1748
+ /******/ e.code = 'MODULE_NOT_FOUND';
1749
+ /******/ throw e;
1750
+ /******/ }
1751
+ /******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
1752
+ /******/
1753
+ /******/ // Return the exports of the module
1754
+ /******/ return module.exports;
1755
+ /******/ }
1756
+ /******/
1757
+ /************************************************************************/
1758
+ /******/
1759
+ /******/ // startup
1760
+ /******/ // Load entry module and return exports
1761
+ /******/ // This entry module is referenced by other modules so it can't be inlined
1762
+ /******/ var __webpack_exports__ = __webpack_require__(737);
1763
+ /******/
1764
+ /******/ })()
1765
+ ;
1766
+ //# sourceMappingURL=playwrightBuddyHarness.js.map