@parhelia/core 0.1.12368 → 0.1.12390

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 (225) hide show
  1. package/dist/agents-view/AgentsView.js +1 -1
  2. package/dist/agents-view/AgentsView.js.map +1 -1
  3. package/dist/components/ui/LanguageSelector.js +1 -3
  4. package/dist/components/ui/LanguageSelector.js.map +1 -1
  5. package/dist/components/ui/dialog.js +1 -1
  6. package/dist/components/ui/dialog.js.map +1 -1
  7. package/dist/config/config.js +53 -16
  8. package/dist/config/config.js.map +1 -1
  9. package/dist/config/notificationRoutes.js +10 -0
  10. package/dist/config/notificationRoutes.js.map +1 -1
  11. package/dist/config/types/workspace.d.ts +6 -0
  12. package/dist/config/types.d.ts +2 -5
  13. package/dist/editor/Editor.js +11 -4
  14. package/dist/editor/Editor.js.map +1 -1
  15. package/dist/editor/ai/AgentCostDisplay.d.ts +1 -0
  16. package/dist/editor/ai/AgentCostDisplay.js +1 -1
  17. package/dist/editor/ai/AgentCostDisplay.js.map +1 -1
  18. package/dist/editor/ai/AgentTerminal.js +144 -36
  19. package/dist/editor/ai/AgentTerminal.js.map +1 -1
  20. package/dist/editor/ai/AgentTerminalStatusBar.d.ts +2 -0
  21. package/dist/editor/ai/AgentTerminalStatusBar.js +22 -37
  22. package/dist/editor/ai/AgentTerminalStatusBar.js.map +1 -1
  23. package/dist/editor/ai/AiResponseMessage.js +0 -1
  24. package/dist/editor/ai/AiResponseMessage.js.map +1 -1
  25. package/dist/editor/ai/ContentInspectorPopover.d.ts +17 -0
  26. package/dist/editor/ai/ContentInspectorPopover.js +136 -0
  27. package/dist/editor/ai/ContentInspectorPopover.js.map +1 -0
  28. package/dist/editor/ai/ContextInfoBar.js +55 -2
  29. package/dist/editor/ai/ContextInfoBar.js.map +1 -1
  30. package/dist/editor/ai/InlineAiDialog.js +1 -7
  31. package/dist/editor/ai/InlineAiDialog.js.map +1 -1
  32. package/dist/editor/ai/ToolCallDisplay.d.ts +4 -0
  33. package/dist/editor/ai/ToolCallDisplay.js +43 -8
  34. package/dist/editor/ai/ToolCallDisplay.js.map +1 -1
  35. package/dist/editor/ai/dialogs/AgentDialogHandler.js +46 -22
  36. package/dist/editor/ai/dialogs/AgentDialogHandler.js.map +1 -1
  37. package/dist/editor/client/EditorShell.js +69 -26
  38. package/dist/editor/client/EditorShell.js.map +1 -1
  39. package/dist/editor/client/editContext.d.ts +3 -2
  40. package/dist/editor/client/hooks/useQuota.d.ts +2 -1
  41. package/dist/editor/client/hooks/useQuota.js.map +1 -1
  42. package/dist/editor/client/hooks/useSocketMessageHandler.js +28 -0
  43. package/dist/editor/client/hooks/useSocketMessageHandler.js.map +1 -1
  44. package/dist/editor/client/operations.d.ts +1 -0
  45. package/dist/editor/client/operations.js +67 -15
  46. package/dist/editor/client/operations.js.map +1 -1
  47. package/dist/editor/client/waitForEditOperationTerminal.d.ts +11 -0
  48. package/dist/editor/client/waitForEditOperationTerminal.js +40 -0
  49. package/dist/editor/client/waitForEditOperationTerminal.js.map +1 -0
  50. package/dist/editor/commands/commands.d.ts +11 -1
  51. package/dist/editor/commands/commands.js +12 -1
  52. package/dist/editor/commands/commands.js.map +1 -1
  53. package/dist/editor/commands/customCommandConverter.d.ts +8 -1
  54. package/dist/editor/commands/customCommandConverter.js +33 -4
  55. package/dist/editor/commands/customCommandConverter.js.map +1 -1
  56. package/dist/editor/commands/handlers/uiActionHandlers.d.ts +6 -0
  57. package/dist/editor/commands/handlers/uiActionHandlers.js +84 -0
  58. package/dist/editor/commands/handlers/uiActionHandlers.js.map +1 -0
  59. package/dist/editor/commands/itemCommands.js +6 -2
  60. package/dist/editor/commands/itemCommands.js.map +1 -1
  61. package/dist/editor/commands/keyboardCommands.d.ts +10 -0
  62. package/dist/editor/commands/keyboardCommands.js +142 -0
  63. package/dist/editor/commands/keyboardCommands.js.map +1 -0
  64. package/dist/editor/commands/undo.d.ts +9 -15
  65. package/dist/editor/commands/undo.js +24 -0
  66. package/dist/editor/commands/undo.js.map +1 -1
  67. package/dist/editor/menubar/PageSelector.js +1 -3
  68. package/dist/editor/menubar/PageSelector.js.map +1 -1
  69. package/dist/editor/menubar/VersionSelector.js +1 -3
  70. package/dist/editor/menubar/VersionSelector.js.map +1 -1
  71. package/dist/editor/menubar/toolbar-sections/CustomCommandsToolbar.js +7 -36
  72. package/dist/editor/menubar/toolbar-sections/CustomCommandsToolbar.js.map +1 -1
  73. package/dist/editor/notifications/notificationRoutes.js +1 -0
  74. package/dist/editor/notifications/notificationRoutes.js.map +1 -1
  75. package/dist/editor/page-editor-chrome/InlineEditor.js +53 -36
  76. package/dist/editor/page-editor-chrome/InlineEditor.js.map +1 -1
  77. package/dist/editor/page-viewer/PageViewer.js +60 -6
  78. package/dist/editor/page-viewer/PageViewer.js.map +1 -1
  79. package/dist/editor/reviews/Comment.js +12 -10
  80. package/dist/editor/reviews/Comment.js.map +1 -1
  81. package/dist/editor/reviews/CommentDisplayPopover.js +1 -3
  82. package/dist/editor/reviews/CommentDisplayPopover.js.map +1 -1
  83. package/dist/editor/reviews/PreviewInfo.js +1 -4
  84. package/dist/editor/reviews/PreviewInfo.js.map +1 -1
  85. package/dist/editor/reviews/reviewCommands.js +4 -1
  86. package/dist/editor/reviews/reviewCommands.js.map +1 -1
  87. package/dist/editor/reviews/useReviews.d.ts +2 -2
  88. package/dist/editor/reviews/useReviews.js +12 -30
  89. package/dist/editor/reviews/useReviews.js.map +1 -1
  90. package/dist/editor/services/agentService.d.ts +26 -0
  91. package/dist/editor/services/agentService.js +41 -0
  92. package/dist/editor/services/agentService.js.map +1 -1
  93. package/dist/editor/services/aiService.d.ts +7 -1
  94. package/dist/editor/services/aiService.js +13 -1
  95. package/dist/editor/services/aiService.js.map +1 -1
  96. package/dist/editor/services/notificationService.d.ts +1 -0
  97. package/dist/editor/services/notificationService.js +1 -0
  98. package/dist/editor/services/notificationService.js.map +1 -1
  99. package/dist/editor/services/reviewsService.d.ts +2 -5
  100. package/dist/editor/services/reviewsService.js +0 -10
  101. package/dist/editor/services/reviewsService.js.map +1 -1
  102. package/dist/editor/services/systemService.d.ts +2 -1
  103. package/dist/editor/services/systemService.js +3 -0
  104. package/dist/editor/services/systemService.js.map +1 -1
  105. package/dist/editor/settings/QuotaInfo.js +15 -7
  106. package/dist/editor/settings/QuotaInfo.js.map +1 -1
  107. package/dist/editor/settings/index/useIndexStatus.js +1 -1
  108. package/dist/editor/settings/index/useIndexStatus.js.map +1 -1
  109. package/dist/editor/settings/panels/AgentProfileConfigPanel.d.ts +10 -0
  110. package/dist/editor/settings/panels/AgentProfileConfigPanel.js +61 -0
  111. package/dist/editor/settings/panels/AgentProfileConfigPanel.js.map +1 -0
  112. package/dist/editor/settings/panels/AgentsPanel.d.ts +0 -4
  113. package/dist/editor/settings/panels/AgentsPanel.js +101 -109
  114. package/dist/editor/settings/panels/AgentsPanel.js.map +1 -1
  115. package/dist/editor/settings/panels/CreateAgentProfileDialog.d.ts +7 -0
  116. package/dist/editor/settings/panels/CreateAgentProfileDialog.js +48 -0
  117. package/dist/editor/settings/panels/CreateAgentProfileDialog.js.map +1 -0
  118. package/dist/editor/settings/panels/GroupedFieldConfigPanel.d.ts +33 -0
  119. package/dist/editor/settings/panels/GroupedFieldConfigPanel.js +91 -0
  120. package/dist/editor/settings/panels/GroupedFieldConfigPanel.js.map +1 -0
  121. package/dist/editor/settings/panels/ModelConfigPanel.d.ts +10 -0
  122. package/dist/editor/settings/panels/ModelConfigPanel.js +51 -0
  123. package/dist/editor/settings/panels/ModelConfigPanel.js.map +1 -0
  124. package/dist/editor/settings/panels/ModelsPanel.js +201 -70
  125. package/dist/editor/settings/panels/ModelsPanel.js.map +1 -1
  126. package/dist/editor/settings/panels/ProjectTemplateAgentPanel.d.ts +10 -0
  127. package/dist/editor/settings/panels/ProjectTemplateAgentPanel.js +46 -0
  128. package/dist/editor/settings/panels/ProjectTemplateAgentPanel.js.map +1 -0
  129. package/dist/editor/settings/panels/ProjectTemplatesPanel.d.ts +2 -0
  130. package/dist/editor/settings/panels/ProjectTemplatesPanel.js +1340 -0
  131. package/dist/editor/settings/panels/ProjectTemplatesPanel.js.map +1 -0
  132. package/dist/editor/settings/panels/ProviderConfigPanel.d.ts +10 -0
  133. package/dist/editor/settings/panels/ProviderConfigPanel.js +32 -0
  134. package/dist/editor/settings/panels/ProviderConfigPanel.js.map +1 -0
  135. package/dist/editor/settings/panels/ProvidersPanel.js +46 -4
  136. package/dist/editor/settings/panels/ProvidersPanel.js.map +1 -1
  137. package/dist/editor/settings/panels/SearchConfigPanel.js +3 -3
  138. package/dist/editor/settings/panels/SearchConfigPanel.js.map +1 -1
  139. package/dist/editor/settings/panels/index.d.ts +1 -2
  140. package/dist/editor/settings/panels/index.js +1 -2
  141. package/dist/editor/settings/panels/index.js.map +1 -1
  142. package/dist/editor/ui/ItemNameDialogNew.js +15 -9
  143. package/dist/editor/ui/ItemNameDialogNew.js.map +1 -1
  144. package/dist/editor/utils/keyboardNavigation.d.ts +6 -20
  145. package/dist/editor/utils/keyboardNavigation.js +48 -139
  146. package/dist/editor/utils/keyboardNavigation.js.map +1 -1
  147. package/dist/revision.d.ts +2 -2
  148. package/dist/revision.js +2 -2
  149. package/dist/setup/services/setupWizardService.d.ts +8 -10
  150. package/dist/setup/services/setupWizardService.js +4 -17
  151. package/dist/setup/services/setupWizardService.js.map +1 -1
  152. package/dist/splash-screen/ModernSplashScreen.js +100 -18
  153. package/dist/splash-screen/ModernSplashScreen.js.map +1 -1
  154. package/dist/splash-screen/ParheliaAssistantChat.js +3 -22
  155. package/dist/splash-screen/ParheliaAssistantChat.js.map +1 -1
  156. package/dist/task-board/TaskBoardWorkspace.js +70 -3
  157. package/dist/task-board/TaskBoardWorkspace.js.map +1 -1
  158. package/dist/task-board/components/AssignAgentDialog.js +9 -4
  159. package/dist/task-board/components/AssignAgentDialog.js.map +1 -1
  160. package/dist/task-board/components/CreateProjectDialog.js +32 -34
  161. package/dist/task-board/components/CreateProjectDialog.js.map +1 -1
  162. package/dist/task-board/components/CreateTaskDialog.d.ts +2 -0
  163. package/dist/task-board/components/CreateTaskDialog.js +35 -11
  164. package/dist/task-board/components/CreateTaskDialog.js.map +1 -1
  165. package/dist/task-board/components/ProjectPropertiesPanel.js +4 -1
  166. package/dist/task-board/components/ProjectPropertiesPanel.js.map +1 -1
  167. package/dist/task-board/components/TaskAgentPanel.js +13 -4
  168. package/dist/task-board/components/TaskAgentPanel.js.map +1 -1
  169. package/dist/task-board/components/TaskAssigneePicker.d.ts +2 -2
  170. package/dist/task-board/components/TaskAssigneePicker.js +12 -4
  171. package/dist/task-board/components/TaskAssigneePicker.js.map +1 -1
  172. package/dist/task-board/components/TaskBoardProjectListSidebar.js.map +1 -1
  173. package/dist/task-board/components/TaskCard.js +2 -2
  174. package/dist/task-board/components/TaskCard.js.map +1 -1
  175. package/dist/task-board/components/TaskDetailPanel.js +2 -2
  176. package/dist/task-board/components/TaskDetailPanel.js.map +1 -1
  177. package/dist/task-board/components/TaskRow.js +2 -2
  178. package/dist/task-board/components/TaskRow.js.map +1 -1
  179. package/dist/task-board/components/WizardCommunicationCenter.js +10 -4
  180. package/dist/task-board/components/WizardCommunicationCenter.js.map +1 -1
  181. package/dist/task-board/services/taskService.d.ts +11 -2
  182. package/dist/task-board/services/taskService.js +20 -2
  183. package/dist/task-board/services/taskService.js.map +1 -1
  184. package/dist/task-board/types.d.ts +52 -7
  185. package/dist/task-board/views/DependencyGraphView.d.ts +31 -4
  186. package/dist/task-board/views/DependencyGraphView.js +383 -64
  187. package/dist/task-board/views/DependencyGraphView.js.map +1 -1
  188. package/dist/types.d.ts +23 -15
  189. package/package.json +7 -7
  190. package/dist/editor/settings/Setup.d.ts +0 -1
  191. package/dist/editor/settings/Setup.js +0 -211
  192. package/dist/editor/settings/Setup.js.map +0 -1
  193. package/dist/editor/settings/panels/DatabasePanel.d.ts +0 -6
  194. package/dist/editor/settings/panels/DatabasePanel.js +0 -50
  195. package/dist/editor/settings/panels/DatabasePanel.js.map +0 -1
  196. package/dist/editor/settings/setup-steps/AiSetupStep/EmbeddingsModelSection.d.ts +0 -2
  197. package/dist/editor/settings/setup-steps/AiSetupStep/EmbeddingsModelSection.js +0 -195
  198. package/dist/editor/settings/setup-steps/AiSetupStep/EmbeddingsModelSection.js.map +0 -1
  199. package/dist/editor/settings/setup-steps/AiSetupStep/index.d.ts +0 -2
  200. package/dist/editor/settings/setup-steps/AiSetupStep/index.js +0 -21
  201. package/dist/editor/settings/setup-steps/AiSetupStep/index.js.map +0 -1
  202. package/dist/editor/settings/setup-steps/AiSetupStep/provider/ProviderSection.d.ts +0 -1
  203. package/dist/editor/settings/setup-steps/AiSetupStep/provider/ProviderSection.js +0 -233
  204. package/dist/editor/settings/setup-steps/AiSetupStep/provider/ProviderSection.js.map +0 -1
  205. package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersList.d.ts +0 -15
  206. package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersList.js +0 -14
  207. package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersList.js.map +0 -1
  208. package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersSection.d.ts +0 -1
  209. package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersSection.js +0 -94
  210. package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersSection.js.map +0 -1
  211. package/dist/editor/settings/setup-steps/AiSetupStep/types.d.ts +0 -1
  212. package/dist/editor/settings/setup-steps/AiSetupStep/types.js +0 -2
  213. package/dist/editor/settings/setup-steps/AiSetupStep/types.js.map +0 -1
  214. package/dist/editor/settings/setup-steps/AiSetupStep/utils.d.ts +0 -5
  215. package/dist/editor/settings/setup-steps/AiSetupStep/utils.js +0 -44
  216. package/dist/editor/settings/setup-steps/AiSetupStep/utils.js.map +0 -1
  217. package/dist/editor/settings/setup-steps/IndexSetupStep.d.ts +0 -2
  218. package/dist/editor/settings/setup-steps/IndexSetupStep.js +0 -36
  219. package/dist/editor/settings/setup-steps/IndexSetupStep.js.map +0 -1
  220. package/dist/editor/settings/setup-steps/SettingsSetupStep.d.ts +0 -2
  221. package/dist/editor/settings/setup-steps/SettingsSetupStep.js +0 -111
  222. package/dist/editor/settings/setup-steps/SettingsSetupStep.js.map +0 -1
  223. package/dist/editor/settings/setup-steps/SetupOverview.d.ts +0 -14
  224. package/dist/editor/settings/setup-steps/SetupOverview.js +0 -38
  225. package/dist/editor/settings/setup-steps/SetupOverview.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  import { ComponentType, ReactNode, SyntheticEvent } from "react";
2
2
  import { EditContextType } from "../editor/client/editContext";
3
- import { Command, CommandData } from "../editor/commands/commands";
3
+ import { Command, CommandData, KeyboardCommand } from "../editor/commands/commands";
4
4
  import { EditorWarningProps } from "../editor/EditorWarnings";
5
5
  import { Component, Field, FieldButton, FullItem } from "../editor/pageModel";
6
6
  import { InsertItemCommand, ItemCommand, ItemCommandData, MoveCopyItemsCommand } from "../editor/commands/itemCommands";
@@ -113,9 +113,6 @@ export type MenuItemGroup = {
113
113
  label?: string;
114
114
  items: MenuItem[];
115
115
  };
116
- export type SetupConfiguration = {
117
- steps: ComponentType[];
118
- };
119
116
  export interface EditorExtensions {
120
117
  [key: string]: unknown;
121
118
  }
@@ -190,6 +187,7 @@ export type EditorConfiguration = {
190
187
  deleteItem: ItemCommand;
191
188
  insertItem: InsertItemCommand;
192
189
  allItemCommands: Command<ItemCommandData>[];
190
+ keyboardCommands: KeyboardCommand<any>[];
193
191
  reviewcommands: Command<CommandData>[];
194
192
  moveItems: MoveCopyItemsCommand;
195
193
  copyItems: MoveCopyItemsCommand;
@@ -253,7 +251,6 @@ export type EditorConfiguration = {
253
251
  panels: SettingsPanel[];
254
252
  }[];
255
253
  };
256
- setup?: SetupConfiguration;
257
254
  statusChecks?: StatusCheck[];
258
255
  /** Custom commands configuration - extensible command system */
259
256
  customCommands?: {
@@ -6,7 +6,7 @@ import { getUserInfo } from "./services/editService";
6
6
  import { getSystemStatus, getEditorSettings, saveUserPreferences, } from "./services/systemService";
7
7
  import uuid from "react-uuid";
8
8
  import { getConfiguration } from "../config/config";
9
- import { useMediaQuery } from "./client/hooks/useMediaQuery";
9
+ import { useEditContext } from "./client/editContext";
10
10
  import { MigrationsView } from "./MigrationsView";
11
11
  import { SetupWizard } from "./SetupWizard";
12
12
  import { AdminRequiredView } from "./AdminRequiredView";
@@ -17,8 +17,8 @@ export function Editor({ configure, className, page, children, }) {
17
17
  const [systemStatus, setSystemStatus] = useState();
18
18
  const [parheliaSettings, setParheliaSettings] = useState();
19
19
  const [hasLicenseError, setHasLicenseError] = useState(false);
20
+ const editContext = useEditContext();
20
21
  const hasInitializedRef = useRef(false);
21
- const isMobile = useMediaQuery("(max-width: 768px)");
22
22
  const [sessionId] = useState(() => {
23
23
  if (typeof window === "undefined") {
24
24
  return uuid();
@@ -93,11 +93,18 @@ export function Editor({ configure, className, page, children, }) {
93
93
  if (hasMigrationIssue || settingsMissing)
94
94
  return;
95
95
  const config = configure({
96
- configuration: getConfiguration(isMobile),
96
+ configuration: getConfiguration(editContext?.isMobile ?? false),
97
97
  userInfo: userInfo,
98
98
  });
99
99
  setConfig(config);
100
- }, [userInfo, systemStatus, configure, hasMigrationIssue, settingsMissing]);
100
+ }, [
101
+ userInfo,
102
+ systemStatus,
103
+ configure,
104
+ hasMigrationIssue,
105
+ settingsMissing,
106
+ editContext?.isMobile,
107
+ ]);
101
108
  // If there's a license error, render LicenseProvider to show the activation dialog
102
109
  if (hasLicenseError && !userInfo) {
103
110
  return (_jsx(LicenseProvider, { children: _jsx(LicenseOverlay, {}) }));
@@ -1 +1 @@
1
- {"version":3,"file":"Editor.js","sourceRoot":"","sources":["../../src/editor/Editor.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Editor.js","sourceRoot":"","sources":["../../src/editor/Editor.tsx"],"names":[],"mappings":"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"}
@@ -24,6 +24,7 @@ interface AgentCostDisplayProps {
24
24
  outputCost: number;
25
25
  cachedCost: number;
26
26
  cacheWriteCost: number;
27
+ imageCost: number;
27
28
  };
28
29
  /** Cost limit for the agent (in USD) */
29
30
  costLimit?: number | null;
@@ -87,7 +87,7 @@ export function AgentCostDisplay({ className = "", response, totalTokens, costLi
87
87
  ? "bg-yellow-500"
88
88
  : "bg-theme-secondary"}`, style: { width: `${Math.min(percentUsed || 0, 100)}%` } }) }), percentUsed != null && percentUsed >= 90 && (_jsx("p", { className: "mt-2 text-xs text-gray-600", children: percentUsed >= 100
89
89
  ? "Cost limit reached. Execution will stop on next API call."
90
- : "Approaching cost limit. Consider extending if needed." }))] })), _jsx("div", { className: "space-y-3", children: (hasTotalData || hasTokenData) && (_jsx(_Fragment, { children: _jsx("div", { className: "space-y-2", children: hasTotalData ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-xs text-gray-500", children: "Input tokens:" }), _jsxs("span", { className: "text-xs", children: [totalTokens.input.toLocaleString(), " (", totalTokens.inputCost.toFixed(2), " ", currency, ")"] })] }), _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-xs text-gray-500", children: "Output tokens:" }), _jsxs("span", { className: "text-xs", children: [totalTokens.output.toLocaleString(), " (", totalTokens.outputCost.toFixed(2), " ", currency, ")"] })] }), totalTokens.cached > 0 && (_jsxs("div", { className: "flex items-center justify-between", "data-testid": "cached-tokens-row", children: [_jsx("span", { className: "text-xs text-gray-500", children: "Cached tokens:" }), _jsxs("span", { className: "text-xs", "data-testid": "cached-tokens-value", children: [totalTokens.cached.toLocaleString(), " (", totalTokens.cachedCost.toFixed(2), " ", currency, ")"] })] })), totalTokens.cacheWrite > 0 && (_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-xs text-gray-500", children: "Cache write tokens:" }), _jsxs("span", { className: "text-xs", children: [totalTokens.cacheWrite.toLocaleString(), " (", (totalTokens.cacheWriteCost ?? 0).toFixed(2), " ", currency, ")"] })] }))] })) : (_jsx(_Fragment, { children: response && currentCost && (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-xs text-gray-500", children: "Input tokens:" }), _jsxs("span", { className: "text-xs", children: [response.numInputTokens.toLocaleString(), "(", currentCost.inputCost.toFixed(2), " ", currency, ")"] })] }), _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-xs text-gray-500", children: "Output tokens:" }), _jsxs("span", { className: "text-xs", children: [response.numOutputTokens.toLocaleString(), "(", currentCost.outputCost.toFixed(2), " ", currency, ")"] })] }), response.numCachedTokens > 0 && (_jsxs("div", { className: "flex items-center justify-between", "data-testid": "cached-tokens-row", children: [_jsx("span", { className: "text-xs text-gray-500", children: "Cached tokens:" }), _jsxs("span", { className: "text-xs", "data-testid": "cached-tokens-value", children: [response.numCachedTokens.toLocaleString(), "(", currentCost.cachedCost.toFixed(2), " ", currency, ")"] })] })), response.numCacheWriteTokens &&
90
+ : "Approaching cost limit. Consider extending if needed." }))] })), _jsx("div", { className: "space-y-3", children: (hasTotalData || hasTokenData) && (_jsx(_Fragment, { children: _jsx("div", { className: "space-y-2", children: hasTotalData ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-xs text-gray-500", children: "Input tokens:" }), _jsxs("span", { className: "text-xs", children: [totalTokens.input.toLocaleString(), " (", totalTokens.inputCost.toFixed(2), " ", currency, ")"] })] }), _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-xs text-gray-500", children: "Output tokens:" }), _jsxs("span", { className: "text-xs", children: [totalTokens.output.toLocaleString(), " (", totalTokens.outputCost.toFixed(2), " ", currency, ")"] })] }), totalTokens.cached > 0 && (_jsxs("div", { className: "flex items-center justify-between", "data-testid": "cached-tokens-row", children: [_jsx("span", { className: "text-xs text-gray-500", children: "Cached tokens:" }), _jsxs("span", { className: "text-xs", "data-testid": "cached-tokens-value", children: [totalTokens.cached.toLocaleString(), " (", totalTokens.cachedCost.toFixed(2), " ", currency, ")"] })] })), totalTokens.cacheWrite > 0 && (_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-xs text-gray-500", children: "Cache write tokens:" }), _jsxs("span", { className: "text-xs", children: [totalTokens.cacheWrite.toLocaleString(), " (", (totalTokens.cacheWriteCost ?? 0).toFixed(2), " ", currency, ")"] })] })), totalTokens.imageCost > 0 && (_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-xs text-gray-500", children: "Image generation:" }), _jsxs("span", { className: "text-xs", children: [totalTokens.imageCost.toFixed(2), " ", currency] })] }))] })) : (_jsx(_Fragment, { children: response && currentCost && (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-xs text-gray-500", children: "Input tokens:" }), _jsxs("span", { className: "text-xs", children: [response.numInputTokens.toLocaleString(), "(", currentCost.inputCost.toFixed(2), " ", currency, ")"] })] }), _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-xs text-gray-500", children: "Output tokens:" }), _jsxs("span", { className: "text-xs", children: [response.numOutputTokens.toLocaleString(), "(", currentCost.outputCost.toFixed(2), " ", currency, ")"] })] }), response.numCachedTokens > 0 && (_jsxs("div", { className: "flex items-center justify-between", "data-testid": "cached-tokens-row", children: [_jsx("span", { className: "text-xs text-gray-500", children: "Cached tokens:" }), _jsxs("span", { className: "text-xs", "data-testid": "cached-tokens-value", children: [response.numCachedTokens.toLocaleString(), "(", currentCost.cachedCost.toFixed(2), " ", currency, ")"] })] })), response.numCacheWriteTokens &&
91
91
  response.numCacheWriteTokens > 0 && (_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-xs text-gray-500", children: "Cache write tokens:" }), _jsxs("span", { className: "text-xs", children: [response.numCacheWriteTokens.toLocaleString(), "(", currentCost.cacheWriteCost.toFixed(2), " ", currency, ")"] })] })), _jsx("div", { className: "mt-2 text-xs text-gray-400", children: "* Estimated costs based on typical Claude 3.5 pricing" })] })) })) }) })) })] }) })] }) }));
92
92
  }
93
93
  //# sourceMappingURL=AgentCostDisplay.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AgentCostDisplay.js","sourceRoot":"","sources":["../../../src/editor/ai/AgentCostDisplay.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AgentCostDisplay.js","sourceRoot":"","sources":["../../../src/editor/ai/AgentCostDisplay.tsx"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import React, { useEffect, useState, useRef, useCallback, useLayoutEffect, useMemo, } from "react";
3
3
  import { Send, AlertCircle, Loader2, User, Wand2, Square, Mic, MicOff, ChevronDown, ChevronUp, ListTodo, ArrowLeft, DollarSign, ExternalLink, Settings2, Target, X, Plus, } from "lucide-react";
4
- import { getAgent, startAgent, updateAgentSettings, updateAgentCostLimit, updateAgentContext, getAgentSkillCatalog, getAgentTriggerSubscriptions, cancelAgent, canonicalizeAgentMetadata, getPendingPrompts, } from "../services/agentService";
4
+ import { getAgent, startAgent, updateAgentSettings, updateAgentCostLimit, updateAgentContext, getAgentSkillCatalog, getAgentOperationAllowances, getAgentTriggerSubscriptions, cancelAgent, canonicalizeAgentMetadata, getPendingPrompts, } from "../services/agentService";
5
5
  import { useEditContext, useFieldsEditContext } from "../client/editContext";
6
6
  import { localStorageService } from "../services/localStorageService";
7
7
  import { Textarea } from "../../components/ui/textarea";
@@ -22,7 +22,6 @@ import { formatTime, formatDateTime } from "../utils";
22
22
  import { cn } from "../../lib/utils";
23
23
  import { Select } from "../../components/ui/select";
24
24
  import { AgentTerminalStatusBar } from "./AgentTerminalStatusBar";
25
- import { useMediaQuery } from "../client/hooks/useMediaQuery";
26
25
  import { SimpleTabs } from "../ui/SimpleTabs";
27
26
  import { Splitter } from "../ui/Splitter";
28
27
  import { ScrollingContentTree } from "../ScrollingContentTree";
@@ -46,6 +45,7 @@ function buildPlaceholderAgentDetails(agentStub) {
46
45
  totalInputTokenCost: 0,
47
46
  totalOutputTokenCost: 0,
48
47
  totalCachedInputTokenCost: 0,
48
+ totalImageCost: 0,
49
49
  totalCost: 0,
50
50
  currency: agentStub.currency || "USD",
51
51
  messageCount: agentStub.messageCount || 0,
@@ -54,6 +54,27 @@ function buildPlaceholderAgentDetails(agentStub) {
54
54
  function normalizeDialogAgentId(value) {
55
55
  return value?.trim().toLowerCase() || "";
56
56
  }
57
+ function formatAllowanceSource(source) {
58
+ const normalized = source?.trim();
59
+ if (!normalized)
60
+ return null;
61
+ if (normalized === "user")
62
+ return "User granted";
63
+ if (normalized.startsWith("preconfigured:profile:"))
64
+ return "Profile";
65
+ if (normalized.startsWith("preconfigured:skill:"))
66
+ return "Skill";
67
+ if (normalized.startsWith("system:")) {
68
+ return normalized
69
+ .slice("system:".length)
70
+ .replace(/[-_]+/g, " ")
71
+ .trim();
72
+ }
73
+ return normalized;
74
+ }
75
+ function formatAllowanceLabel(allowance) {
76
+ return `${allowance.operationType || "*"}${"itemPath" in allowance ? ` ${allowance.itemPath}` : ` ${allowance.normalizedPath}`}`;
77
+ }
57
78
  function getVisibleDialogRegistry() {
58
79
  const registry = globalThis.__agentDialogVisibleCallbacks;
59
80
  return registry && typeof registry === "object" ? registry : {};
@@ -538,6 +559,7 @@ const calculateTotalTokens = (messages) => {
538
559
  outputCost: acc.outputCost + (message.outputTokenCost || 0),
539
560
  cachedCost: acc.cachedCost + (message.cachedInputTokenCost || 0),
540
561
  cacheWriteCost: acc.cacheWriteCost,
562
+ imageCost: acc.imageCost,
541
563
  totalCost: acc.totalCost + (message.totalCost || 0),
542
564
  };
543
565
  }, {
@@ -549,6 +571,7 @@ const calculateTotalTokens = (messages) => {
549
571
  outputCost: 0,
550
572
  cachedCost: 0,
551
573
  cacheWriteCost: 0,
574
+ imageCost: 0,
552
575
  totalCost: 0,
553
576
  });
554
577
  return totals;
@@ -635,28 +658,36 @@ const convertAgentMessagesToAiFormat = (agentMessages) => {
635
658
  role: agentMessage.role,
636
659
  createdDate: agentMessage.createdDate,
637
660
  tool_calls: agentMessage.toolCalls
638
- ? agentMessage.toolCalls.map((toolCall) => ({
639
- id: toolCall.toolCallId,
640
- displayName: toolCall.functionName,
641
- function: {
642
- name: toolCall.functionName,
643
- arguments: toolCall.functionArguments,
644
- result: toolCall.functionResult,
645
- error: toolCall.functionError,
646
- },
647
- // Pass through approval info if present on the tool call
648
- requiresApproval: toolCall.requiresApproval,
649
- // Pass through isCompleted so ToolCallDisplay knows when to hide spinner
650
- isCompleted: toolCall.isCompleted,
651
- // Tool call is streaming if message is not completed and tool call has no result yet
652
- isStreaming: !agentMessage.isCompleted &&
653
- !toolCall.isCompleted &&
654
- !toolCall.functionResult &&
655
- !toolCall.functionError,
656
- // Pass through message IDs for approval/rejection events
657
- messageId: toolCall.messageId,
658
- dbMessageId: toolCall.dbMessageId,
659
- }))
661
+ ? agentMessage.toolCalls.map((toolCall) => {
662
+ const isPruned = !!toolCall.isPruned ||
663
+ /^PRUNED$/i.test(toolCall.functionError || "");
664
+ return {
665
+ id: toolCall.toolCallId,
666
+ displayName: toolCall.functionName,
667
+ function: {
668
+ name: toolCall.functionName,
669
+ arguments: toolCall.functionArguments,
670
+ result: toolCall.functionResult,
671
+ error: toolCall.functionError,
672
+ },
673
+ // Pass through approval info if present on the tool call
674
+ requiresApproval: toolCall.requiresApproval,
675
+ // Pass through prune metadata so the terminal can render a neutral state
676
+ isPruned,
677
+ prunedAt: toolCall.prunedAt,
678
+ // Pass through isCompleted so ToolCallDisplay knows when to hide spinner
679
+ isCompleted: toolCall.isCompleted,
680
+ // Tool call is streaming if message is not completed and tool call has no result yet
681
+ isStreaming: !agentMessage.isCompleted &&
682
+ !toolCall.isCompleted &&
683
+ !toolCall.functionResult &&
684
+ !toolCall.functionError &&
685
+ !isPruned,
686
+ // Pass through message IDs for approval/rejection events
687
+ messageId: toolCall.messageId,
688
+ dbMessageId: toolCall.dbMessageId,
689
+ };
690
+ })
660
691
  : [],
661
692
  };
662
693
  if (agentMessage.toolCallId) {
@@ -881,7 +912,6 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, isActive =
881
912
  const [mode, setMode] = useState("supervised");
882
913
  const [queuedPrompts, setQueuedPrompts] = useState([]);
883
914
  const [expandedQueuedTriggerIds, setExpandedQueuedTriggerIds] = useState({});
884
- const isMobile = useMediaQuery("(max-width: 768px)");
885
915
  const [contextPanelsActiveTab, setContextPanelsActiveTab] = useState(0);
886
916
  const [hiddenContextPanelTabIds, setHiddenContextPanelTabIds] = useState(new Set());
887
917
  const [showCostAndAgent, setShowCostAndAgent] = useState(false);
@@ -893,8 +923,14 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, isActive =
893
923
  const [skillsLoading, setSkillsLoading] = useState(false);
894
924
  const [skillsError, setSkillsError] = useState(null);
895
925
  const [triggerSubscriptions, setTriggerSubscriptions] = useState([]);
926
+ const [operationAllowances, setOperationAllowances] = useState({
927
+ sitecore: [],
928
+ filesystem: [],
929
+ });
896
930
  const [triggerSubscriptionsLoading, setTriggerSubscriptionsLoading] = useState(false);
931
+ const [operationAllowancesLoading, setOperationAllowancesLoading] = useState(false);
897
932
  const [triggerSubscriptionsError, setTriggerSubscriptionsError] = useState(null);
933
+ const [operationAllowancesError, setOperationAllowancesError] = useState(null);
898
934
  const hasSpawnedAgents = useMemo(() => {
899
935
  if (!agentMetadata)
900
936
  return false;
@@ -1030,7 +1066,11 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, isActive =
1030
1066
  }
1031
1067
  if (!agent?.id || agent.status === "new") {
1032
1068
  setTriggerSubscriptions([]);
1069
+ setTriggerSubscriptionsLoading(false);
1033
1070
  setTriggerSubscriptionsError(null);
1071
+ setOperationAllowances({ sitecore: [], filesystem: [] });
1072
+ setOperationAllowancesLoading(false);
1073
+ setOperationAllowancesError(null);
1034
1074
  return () => {
1035
1075
  active = false;
1036
1076
  };
@@ -1055,7 +1095,28 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, isActive =
1055
1095
  }
1056
1096
  }
1057
1097
  };
1098
+ const loadOperationAllowances = async () => {
1099
+ try {
1100
+ setOperationAllowancesLoading(true);
1101
+ setOperationAllowancesError(null);
1102
+ const allowances = await getAgentOperationAllowances(agent.id);
1103
+ if (active) {
1104
+ setOperationAllowances(allowances);
1105
+ }
1106
+ }
1107
+ catch (e) {
1108
+ if (active) {
1109
+ setOperationAllowancesError(e?.message || "Failed to load allowances");
1110
+ }
1111
+ }
1112
+ finally {
1113
+ if (active) {
1114
+ setOperationAllowancesLoading(false);
1115
+ }
1116
+ }
1117
+ };
1058
1118
  void loadTriggerSubscriptions();
1119
+ void loadOperationAllowances();
1059
1120
  return () => {
1060
1121
  active = false;
1061
1122
  };
@@ -1132,6 +1193,20 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, isActive =
1132
1193
  return unique;
1133
1194
  }, [backendAssignedSkillIds, metadataSelectedSkillIds]);
1134
1195
  const activeTriggerSubscriptions = useMemo(() => triggerSubscriptions.filter((sub) => sub.isActive), [triggerSubscriptions]);
1196
+ const allowanceGroups = useMemo(() => [
1197
+ {
1198
+ key: "sitecore",
1199
+ label: "Sitecore",
1200
+ rows: operationAllowances.sitecore,
1201
+ },
1202
+ {
1203
+ key: "filesystem",
1204
+ label: "Filesystem",
1205
+ rows: operationAllowances.filesystem,
1206
+ },
1207
+ ], [operationAllowances]);
1208
+ const hasAnyAllowances = useMemo(() => operationAllowances.sitecore.length > 0 ||
1209
+ operationAllowances.filesystem.length > 0, [operationAllowances]);
1135
1210
  const allowedProfileSkillIdSet = useMemo(() => {
1136
1211
  const ids = activeProfile?.allowedSkills
1137
1212
  ?.map((skill) => String(skill?.id || "").toLowerCase())
@@ -1301,7 +1376,7 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, isActive =
1301
1376
  const seenMessageIdsRef = useRef(new Set());
1302
1377
  const lastSeqRef = useRef(0);
1303
1378
  const subscribedAgentIdRef = useRef(null);
1304
- // Cache mode/model changes made while the agent is still "new" (not yet persisted)
1379
+ // Cache mode/model/profile changes made while the agent is still "new" (not yet persisted)
1305
1380
  const pendingSettingsRef = useRef(null);
1306
1381
  // Track whether textarea should maintain focus during re-renders
1307
1382
  const shouldMaintainFocusRef = useRef(false);
@@ -1652,6 +1727,7 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, isActive =
1652
1727
  outputCost: Number(cost.output) || 0,
1653
1728
  cachedCost: Number(cost.cached) || 0,
1654
1729
  cacheWriteCost: Number(cost.cacheWrite) || 0,
1730
+ imageCost: Number(cost.imageCost ?? cost.totalImageCost) || 0,
1655
1731
  totalCost: Number(cost.total) || 0,
1656
1732
  currency: "USD",
1657
1733
  };
@@ -1795,6 +1871,8 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, isActive =
1795
1871
  }
1796
1872
  // Add tool call to the message in the array
1797
1873
  if (toolCallMessageId && message.data && toolCallId) {
1874
+ const toolCallError = message.data.functionError || message.data.error || "";
1875
+ const isPruned = !!message.data?.isPruned || /^PRUNED$/i.test(String(toolCallError));
1798
1876
  const toolCall = {
1799
1877
  id: toolCallId,
1800
1878
  messageId: toolCallMessageId,
@@ -1803,7 +1881,8 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, isActive =
1803
1881
  functionName: extractedToolCall.functionName,
1804
1882
  functionArguments: extractedToolCall.functionArguments,
1805
1883
  functionResult: message.data.functionResult || message.data.result || "",
1806
- functionError: message.data.functionError || message.data.error || "",
1884
+ functionError: toolCallError,
1885
+ isPruned,
1807
1886
  isCompleted: false,
1808
1887
  responseTimeMs: message.data.responseTimeMs,
1809
1888
  createdDate: new Date().toISOString(),
@@ -1936,6 +2015,7 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, isActive =
1936
2015
  outputCost: Number(cost.output) || 0,
1937
2016
  cachedCost: Number(cost.cached) || 0,
1938
2017
  cacheWriteCost: Number(cost.cacheWrite) || 0,
2018
+ imageCost: Number(cost.imageCost) || 0,
1939
2019
  totalCost: Number(cost.total) || 0,
1940
2020
  currency: "USD",
1941
2021
  };
@@ -1984,6 +2064,7 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, isActive =
1984
2064
  outputCost: Number(data.totalOutputTokenCost) || 0,
1985
2065
  cachedCost: Number(data.totalCachedTokenCost) || 0,
1986
2066
  cacheWriteCost: Number(data.totalCacheWriteTokenCost) || 0,
2067
+ imageCost: Number(data.totalImageCost) || 0,
1987
2068
  totalCost: Number(data.totalCost) || 0,
1988
2069
  currency: data.currency || "USD",
1989
2070
  };
@@ -2180,6 +2261,7 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, isActive =
2180
2261
  totalInputTokenCost: 0,
2181
2262
  totalOutputTokenCost: 0,
2182
2263
  totalCachedInputTokenCost: 0,
2264
+ totalImageCost: 0,
2183
2265
  totalCost: 0,
2184
2266
  messageCount: 0,
2185
2267
  });
@@ -2918,6 +3000,7 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, isActive =
2918
3000
  outputCost: Number(totals.totalOutputTokenCost) || 0,
2919
3001
  cachedCost: Number(totals.totalCachedInputTokenCost) || 0,
2920
3002
  cacheWriteCost: Number(totals.totalCacheWriteTokenCost) || 0,
3003
+ imageCost: Number(totals.totalImageCost) || 0,
2921
3004
  totalCost: totalCost,
2922
3005
  currency: totals.currency,
2923
3006
  };
@@ -3514,7 +3597,7 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, isActive =
3514
3597
  textareaRef.current.focus();
3515
3598
  }
3516
3599
  }, [messages, activePlaceholderInput]);
3517
- // Persist any pending settings (mode/model) once an agent exists server-side
3600
+ // Persist any pending settings (mode/model/profile) once an agent exists server-side
3518
3601
  const persistPendingSettingsIfNeeded = useCallback(async () => {
3519
3602
  try {
3520
3603
  if (!agent?.id)
@@ -3527,6 +3610,10 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, isActive =
3527
3610
  payload.model = pending.modelName;
3528
3611
  if (pending.mode)
3529
3612
  payload.mode = pending.mode;
3613
+ if (pending.profileId)
3614
+ payload.profileId = pending.profileId;
3615
+ if (pending.profileName != null)
3616
+ payload.profileName = pending.profileName;
3530
3617
  if (Object.keys(payload).length === 0)
3531
3618
  return;
3532
3619
  await updateAgentSettings(agent.id, payload);
@@ -4431,8 +4518,16 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, isActive =
4431
4518
  if (effectiveCostLimit === undefined) {
4432
4519
  effectiveCostLimit = undefined;
4433
4520
  }
4434
- // Calculate total token usage for cost display
4435
- const totalTokens = calculateTotalTokens(messages);
4521
+ // Calculate total token usage for cost display.
4522
+ // Message rows do not currently persist imageCost, so on refresh we fall back
4523
+ // to the persisted agent aggregate for that single field.
4524
+ const totalTokens = (() => {
4525
+ const totals = calculateTotalTokens(messages);
4526
+ return {
4527
+ ...totals,
4528
+ imageCost: totals.imageCost || Number(agent?.totalImageCost) || 0,
4529
+ };
4530
+ })();
4436
4531
  // Determine if the agent is actively executing (submitting, connecting, waiting, or streaming)
4437
4532
  const isExecuting = isSubmitting ||
4438
4533
  isConnecting ||
@@ -4809,7 +4904,7 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, isActive =
4809
4904
  activeProfile?.name ||
4810
4905
  "Agent" }), _jsx("span", { className: "text-xs text-gray-400", children: formatTime(new Date()) })] }), _jsxs("div", { className: "flex items-center gap-1 pt-2", children: [_jsx("div", { className: "h-1 w-1 animate-bounce rounded-full bg-gray-400 [animation-delay:-0.3s]" }), _jsx("div", { className: "h-1 w-1 animate-bounce rounded-full bg-gray-400 [animation-delay:-0.15s]" }), _jsx("div", { className: "h-1 w-1 animate-bounce rounded-full bg-gray-400" })] })] })] }))] }), !simpleMode && renderCostLimitBanner(), _jsx("div", { ref: messagesEndRef })] }), !hideContext &&
4811
4906
  !simpleMode &&
4812
- (isMobile ? (_jsx("div", { className: "border-t border-gray-200 bg-gray-50", "data-testid": "agent-context-panel-tabs", children: _jsx(SimpleTabs, { tabs: [
4907
+ (editContext?.isMobile ? (_jsx("div", { className: "border-t border-gray-200 bg-gray-50", "data-testid": "agent-context-panel-tabs", children: _jsx(SimpleTabs, { tabs: [
4813
4908
  {
4814
4909
  id: "context",
4815
4910
  label: "Context",
@@ -5034,6 +5129,8 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, isActive =
5034
5129
  else {
5035
5130
  pendingSettingsRef.current = {
5036
5131
  ...(pendingSettingsRef.current || {}),
5132
+ profileId: nextProfile.id,
5133
+ profileName: nextProfile.name,
5037
5134
  };
5038
5135
  setAgentMetadata((current) => {
5039
5136
  const next = {
@@ -5120,7 +5217,16 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, isActive =
5120
5217
  }, children: _jsx(ExternalLink, { className: "h-2.5 w-2.5", strokeWidth: 1.5 }) }), backendAssignedSkillSet.has(skillId.toLowerCase()) ? (_jsx("span", { className: "text-[9px] text-gray-500", children: "auto" })) : (_jsx("button", { type: "button", className: "rounded p-0.5 text-gray-500 hover:bg-gray-200 hover:text-gray-700", onClick: () => {
5121
5218
  void handleRemoveSkill(skillId);
5122
5219
  }, title: "Remove skill", "aria-label": `Remove ${skill?.name || skillId}`, children: _jsx(X, { className: "h-2.5 w-2.5", strokeWidth: 1 }) }))] }, skillId));
5123
- }) }))] }), _jsxs("div", { children: [_jsx("div", { className: "mb-0.5 px-0.5 text-[11px] font-medium text-gray-700", children: "Subscribed triggers" }), _jsx("div", { className: "max-h-28 overflow-y-auto rounded border border-gray-100 bg-gray-50/50 p-1", children: triggerSubscriptionsLoading ? (_jsx("div", { className: "px-1 text-[10px] text-gray-500", children: "Loading subscribed triggers..." })) : activeTriggerSubscriptions.length > 0 ? (_jsx("div", { className: "space-y-0.5", children: activeTriggerSubscriptions.map((sub) => {
5220
+ }) }))] }), _jsxs("div", { children: [_jsx("div", { className: "mb-0.5 px-0.5 text-[11px] font-medium text-gray-700", children: "Allowances" }), _jsx("div", { className: "max-h-36 overflow-y-auto rounded border border-gray-100 bg-gray-50/50 p-1", "data-testid": "agent-allowances-section", children: operationAllowancesLoading ? (_jsx("div", { className: "px-1 text-[10px] text-gray-500", children: "Loading allowances..." })) : hasAnyAllowances ? (_jsx("div", { className: "space-y-1", children: allowanceGroups.map((group) => group.rows.length > 0 ? (_jsxs("div", { className: "space-y-0.5", children: [_jsx("div", { className: "px-1 text-[9px] font-medium uppercase tracking-wide text-gray-400", children: group.label }), group.rows.map((allowance, index) => {
5221
+ const sourceLabel = formatAllowanceSource(allowance.source);
5222
+ const pathLabel = "itemPath" in allowance
5223
+ ? allowance.itemPath
5224
+ : allowance.normalizedPath;
5225
+ return (_jsxs("div", { className: "rounded px-1 py-0.5 hover:bg-white/60 transition-colors", "data-testid": `agent-allowance-row-${group.key}`, children: [_jsxs("div", { className: "flex items-baseline gap-1.5", children: [_jsx("div", { className: "shrink-0 text-[10px] font-medium text-gray-700", children: allowance.operationType || "*" }), _jsx("div", { className: "truncate text-[9px] text-gray-500", title: formatAllowanceLabel(allowance), children: pathLabel })] }), (sourceLabel ||
5226
+ allowance.grantedBy) && (_jsx("div", { className: "truncate pl-6 text-[9px] text-gray-400", children: [sourceLabel, allowance.grantedBy]
5227
+ .filter(Boolean)
5228
+ .join(" · ") }))] }, `${group.key}-${allowance.operationType}-${pathLabel}-${index}`));
5229
+ })] }, group.key)) : null) })) : (_jsx("div", { className: "px-1 text-[10px] text-gray-500", children: "No active allowances" })) }), operationAllowancesError && (_jsx("div", { className: "mt-1 text-[10px] text-red-600", children: operationAllowancesError }))] }), _jsxs("div", { children: [_jsx("div", { className: "mb-0.5 px-0.5 text-[11px] font-medium text-gray-700", children: "Subscribed triggers" }), _jsx("div", { className: "max-h-28 overflow-y-auto rounded border border-gray-100 bg-gray-50/50 p-1", children: triggerSubscriptionsLoading ? (_jsx("div", { className: "px-1 text-[10px] text-gray-500", children: "Loading subscribed triggers..." })) : activeTriggerSubscriptions.length > 0 ? (_jsx("div", { className: "space-y-0.5", children: activeTriggerSubscriptions.map((sub) => {
5124
5230
  const filterText = (sub.filter || "").trim();
5125
5231
  return (_jsxs("div", { className: "flex items-baseline gap-1.5 rounded px-1 py-0.5 hover:bg-white/60 transition-colors", children: [_jsx("div", { className: "shrink-0 text-[10px] font-medium text-gray-700", children: sub.triggerName }), filterText.length > 0 && (_jsx("div", { className: "truncate text-[9px] text-gray-400", title: filterText, children: filterText }))] }, sub.id));
5126
5232
  }) })) : (_jsx("div", { className: "px-1 text-[10px] text-gray-500", children: "No active trigger subscriptions" })) }), triggerSubscriptionsError && (_jsx("div", { className: "mt-1 text-[10px] text-red-600", children: triggerSubscriptionsError }))] })] }) })] }), activeProfile?.prompts?.length ? (_jsxs(Popover, { open: showPredefined, onOpenChange: setShowPredefined, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx("button", { className: "rounded p-1 hover:bg-gray-100", onClick: () => { }, title: "Predefined prompts", "aria-label": "Predefined prompts", type: "button", children: _jsx(Wand2, { className: "h-3 w-3", strokeWidth: 1 }) }) }), _jsx(PopoverContent, { className: "w-64 p-0", align: "start", children: _jsx("div", { className: "max-h-56 overflow-y-auto p-2", children: activeProfile.prompts.map((p, index) => (_jsx("div", { className: "cursor-pointer rounded p-1.5 text-[10px] text-gray-700 hover:bg-gray-100", onClick: () => {
@@ -5128,10 +5234,10 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, isActive =
5128
5234
  setShowPredefined(false);
5129
5235
  if (textareaRef.current)
5130
5236
  textareaRef.current.focus();
5131
- }, children: p.title }, index))) }) })] })) : null, !hideBottomControls && !simpleMode && isMobile && (_jsxs(Popover, { open: showCostAndAgent, onOpenChange: setShowCostAndAgent, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx(Button, { onClick: () => {
5132
- if (isMobile)
5237
+ }, children: p.title }, index))) }) })] })) : null, !hideBottomControls && !simpleMode && editContext?.isMobile && (_jsxs(Popover, { open: showCostAndAgent, onOpenChange: setShowCostAndAgent, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx(Button, { onClick: () => {
5238
+ if (editContext?.isMobile)
5133
5239
  setShowCostAndAgent((prev) => !prev);
5134
- }, variant: "outline", size: "sm", className: "h-5.5 w-5.5 cursor-pointer rounded-full", "aria-expanded": isMobile ? showCostAndAgent : undefined, "aria-label": "Toggle cost and context info", children: _jsx(DollarSign, { className: "size-3", strokeWidth: 1 }) }) }), _jsx(PopoverContent, { className: "w-64 p-0", align: "start", children: _jsx("div", { className: "max-h-56 overflow-y-auto p-2", children: _jsx(AgentTerminalStatusBar, { agent: agent, contextWindowStatus: contextWindowStatus, effectiveModelName: effectiveModelName, liveTotals: liveTotals, totalTokens: liveTotals
5240
+ }, variant: "outline", size: "sm", className: "h-5.5 w-5.5 cursor-pointer rounded-full", "aria-expanded": editContext?.isMobile ? showCostAndAgent : undefined, "aria-label": "Toggle cost and context info", children: _jsx(DollarSign, { className: "size-3", strokeWidth: 1 }) }) }), _jsx(PopoverContent, { className: "w-64 p-0", align: "start", children: _jsx("div", { className: "max-h-56 overflow-y-auto p-2", children: _jsx(AgentTerminalStatusBar, { agent: agent, contextWindowStatus: contextWindowStatus, effectiveModelName: effectiveModelName, liveTotals: liveTotals, totalTokens: liveTotals
5135
5241
  ? {
5136
5242
  input: liveTotals.input,
5137
5243
  output: liveTotals.output,
@@ -5141,6 +5247,7 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, isActive =
5141
5247
  outputCost: liveTotals.outputCost,
5142
5248
  cachedCost: liveTotals.cachedCost,
5143
5249
  cacheWriteCost: liveTotals.cacheWriteCost ?? 0,
5250
+ imageCost: liveTotals.imageCost ?? 0,
5144
5251
  totalCost: liveTotals.totalCost,
5145
5252
  }
5146
5253
  : totalTokens, effectiveCostLimit: effectiveCostLimit, messages: messages, showCompressionPopover: showCompressionPopover, setShowCompressionPopover: setShowCompressionPopover }) }) })] }))] })), _jsxs("div", { className: "flex items-center gap-1 self-end", children: [_jsx("span", { title: isVoiceDisabled
@@ -5164,7 +5271,7 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, isActive =
5164
5271
  : allPendingApprovals.length > 0
5165
5272
  ? "Approve or reject pending tool calls first"
5166
5273
  : "Send", "aria-label": isExecuting ? "Stop" : "Send", "data-testid": "agent-send-stop-button", "data-executing": isExecuting ? "true" : "false", children: isExecuting ? (_jsx(Square, { className: "size-3", strokeWidth: 1 })) : (_jsx(Send, { className: "size-3", strokeWidth: 1 })) })] })] }));
5167
- })(), !hideBottomControls && !simpleMode && !isMobile && (_jsx(AgentTerminalStatusBar, { agent: agent, contextWindowStatus: contextWindowStatus, effectiveModelName: effectiveModelName, liveTotals: liveTotals, totalTokens: liveTotals
5274
+ })(), !hideBottomControls && !simpleMode && !editContext?.isMobile && (_jsx(AgentTerminalStatusBar, { agent: agent, contextWindowStatus: contextWindowStatus, effectiveModelName: effectiveModelName, liveTotals: liveTotals, totalTokens: liveTotals
5168
5275
  ? {
5169
5276
  input: liveTotals.input,
5170
5277
  output: liveTotals.output,
@@ -5174,6 +5281,7 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, isActive =
5174
5281
  outputCost: liveTotals.outputCost,
5175
5282
  cachedCost: liveTotals.cachedCost,
5176
5283
  cacheWriteCost: liveTotals.cacheWriteCost ?? 0,
5284
+ imageCost: liveTotals.imageCost ?? 0,
5177
5285
  totalCost: liveTotals.totalCost,
5178
5286
  }
5179
5287
  : totalTokens, effectiveCostLimit: effectiveCostLimit, messages: messages, showCompressionPopover: showCompressionPopover, setShowCompressionPopover: setShowCompressionPopover }))] })] }));