@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.
- package/dist/agents-view/AgentsView.js +1 -1
- package/dist/agents-view/AgentsView.js.map +1 -1
- package/dist/components/ui/LanguageSelector.js +1 -3
- package/dist/components/ui/LanguageSelector.js.map +1 -1
- package/dist/components/ui/dialog.js +1 -1
- package/dist/components/ui/dialog.js.map +1 -1
- package/dist/config/config.js +53 -16
- package/dist/config/config.js.map +1 -1
- package/dist/config/notificationRoutes.js +10 -0
- package/dist/config/notificationRoutes.js.map +1 -1
- package/dist/config/types/workspace.d.ts +6 -0
- package/dist/config/types.d.ts +2 -5
- package/dist/editor/Editor.js +11 -4
- package/dist/editor/Editor.js.map +1 -1
- package/dist/editor/ai/AgentCostDisplay.d.ts +1 -0
- package/dist/editor/ai/AgentCostDisplay.js +1 -1
- package/dist/editor/ai/AgentCostDisplay.js.map +1 -1
- package/dist/editor/ai/AgentTerminal.js +144 -36
- package/dist/editor/ai/AgentTerminal.js.map +1 -1
- package/dist/editor/ai/AgentTerminalStatusBar.d.ts +2 -0
- package/dist/editor/ai/AgentTerminalStatusBar.js +22 -37
- package/dist/editor/ai/AgentTerminalStatusBar.js.map +1 -1
- package/dist/editor/ai/AiResponseMessage.js +0 -1
- package/dist/editor/ai/AiResponseMessage.js.map +1 -1
- package/dist/editor/ai/ContentInspectorPopover.d.ts +17 -0
- package/dist/editor/ai/ContentInspectorPopover.js +136 -0
- package/dist/editor/ai/ContentInspectorPopover.js.map +1 -0
- package/dist/editor/ai/ContextInfoBar.js +55 -2
- package/dist/editor/ai/ContextInfoBar.js.map +1 -1
- package/dist/editor/ai/InlineAiDialog.js +1 -7
- package/dist/editor/ai/InlineAiDialog.js.map +1 -1
- package/dist/editor/ai/ToolCallDisplay.d.ts +4 -0
- package/dist/editor/ai/ToolCallDisplay.js +43 -8
- package/dist/editor/ai/ToolCallDisplay.js.map +1 -1
- package/dist/editor/ai/dialogs/AgentDialogHandler.js +46 -22
- package/dist/editor/ai/dialogs/AgentDialogHandler.js.map +1 -1
- package/dist/editor/client/EditorShell.js +69 -26
- package/dist/editor/client/EditorShell.js.map +1 -1
- package/dist/editor/client/editContext.d.ts +3 -2
- package/dist/editor/client/hooks/useQuota.d.ts +2 -1
- package/dist/editor/client/hooks/useQuota.js.map +1 -1
- package/dist/editor/client/hooks/useSocketMessageHandler.js +28 -0
- package/dist/editor/client/hooks/useSocketMessageHandler.js.map +1 -1
- package/dist/editor/client/operations.d.ts +1 -0
- package/dist/editor/client/operations.js +67 -15
- package/dist/editor/client/operations.js.map +1 -1
- package/dist/editor/client/waitForEditOperationTerminal.d.ts +11 -0
- package/dist/editor/client/waitForEditOperationTerminal.js +40 -0
- package/dist/editor/client/waitForEditOperationTerminal.js.map +1 -0
- package/dist/editor/commands/commands.d.ts +11 -1
- package/dist/editor/commands/commands.js +12 -1
- package/dist/editor/commands/commands.js.map +1 -1
- package/dist/editor/commands/customCommandConverter.d.ts +8 -1
- package/dist/editor/commands/customCommandConverter.js +33 -4
- package/dist/editor/commands/customCommandConverter.js.map +1 -1
- package/dist/editor/commands/handlers/uiActionHandlers.d.ts +6 -0
- package/dist/editor/commands/handlers/uiActionHandlers.js +84 -0
- package/dist/editor/commands/handlers/uiActionHandlers.js.map +1 -0
- package/dist/editor/commands/itemCommands.js +6 -2
- package/dist/editor/commands/itemCommands.js.map +1 -1
- package/dist/editor/commands/keyboardCommands.d.ts +10 -0
- package/dist/editor/commands/keyboardCommands.js +142 -0
- package/dist/editor/commands/keyboardCommands.js.map +1 -0
- package/dist/editor/commands/undo.d.ts +9 -15
- package/dist/editor/commands/undo.js +24 -0
- package/dist/editor/commands/undo.js.map +1 -1
- package/dist/editor/menubar/PageSelector.js +1 -3
- package/dist/editor/menubar/PageSelector.js.map +1 -1
- package/dist/editor/menubar/VersionSelector.js +1 -3
- package/dist/editor/menubar/VersionSelector.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/CustomCommandsToolbar.js +7 -36
- package/dist/editor/menubar/toolbar-sections/CustomCommandsToolbar.js.map +1 -1
- package/dist/editor/notifications/notificationRoutes.js +1 -0
- package/dist/editor/notifications/notificationRoutes.js.map +1 -1
- package/dist/editor/page-editor-chrome/InlineEditor.js +53 -36
- package/dist/editor/page-editor-chrome/InlineEditor.js.map +1 -1
- package/dist/editor/page-viewer/PageViewer.js +60 -6
- package/dist/editor/page-viewer/PageViewer.js.map +1 -1
- package/dist/editor/reviews/Comment.js +12 -10
- package/dist/editor/reviews/Comment.js.map +1 -1
- package/dist/editor/reviews/CommentDisplayPopover.js +1 -3
- package/dist/editor/reviews/CommentDisplayPopover.js.map +1 -1
- package/dist/editor/reviews/PreviewInfo.js +1 -4
- package/dist/editor/reviews/PreviewInfo.js.map +1 -1
- package/dist/editor/reviews/reviewCommands.js +4 -1
- package/dist/editor/reviews/reviewCommands.js.map +1 -1
- package/dist/editor/reviews/useReviews.d.ts +2 -2
- package/dist/editor/reviews/useReviews.js +12 -30
- package/dist/editor/reviews/useReviews.js.map +1 -1
- package/dist/editor/services/agentService.d.ts +26 -0
- package/dist/editor/services/agentService.js +41 -0
- package/dist/editor/services/agentService.js.map +1 -1
- package/dist/editor/services/aiService.d.ts +7 -1
- package/dist/editor/services/aiService.js +13 -1
- package/dist/editor/services/aiService.js.map +1 -1
- package/dist/editor/services/notificationService.d.ts +1 -0
- package/dist/editor/services/notificationService.js +1 -0
- package/dist/editor/services/notificationService.js.map +1 -1
- package/dist/editor/services/reviewsService.d.ts +2 -5
- package/dist/editor/services/reviewsService.js +0 -10
- package/dist/editor/services/reviewsService.js.map +1 -1
- package/dist/editor/services/systemService.d.ts +2 -1
- package/dist/editor/services/systemService.js +3 -0
- package/dist/editor/services/systemService.js.map +1 -1
- package/dist/editor/settings/QuotaInfo.js +15 -7
- package/dist/editor/settings/QuotaInfo.js.map +1 -1
- package/dist/editor/settings/index/useIndexStatus.js +1 -1
- package/dist/editor/settings/index/useIndexStatus.js.map +1 -1
- package/dist/editor/settings/panels/AgentProfileConfigPanel.d.ts +10 -0
- package/dist/editor/settings/panels/AgentProfileConfigPanel.js +61 -0
- package/dist/editor/settings/panels/AgentProfileConfigPanel.js.map +1 -0
- package/dist/editor/settings/panels/AgentsPanel.d.ts +0 -4
- package/dist/editor/settings/panels/AgentsPanel.js +101 -109
- package/dist/editor/settings/panels/AgentsPanel.js.map +1 -1
- package/dist/editor/settings/panels/CreateAgentProfileDialog.d.ts +7 -0
- package/dist/editor/settings/panels/CreateAgentProfileDialog.js +48 -0
- package/dist/editor/settings/panels/CreateAgentProfileDialog.js.map +1 -0
- package/dist/editor/settings/panels/GroupedFieldConfigPanel.d.ts +33 -0
- package/dist/editor/settings/panels/GroupedFieldConfigPanel.js +91 -0
- package/dist/editor/settings/panels/GroupedFieldConfigPanel.js.map +1 -0
- package/dist/editor/settings/panels/ModelConfigPanel.d.ts +10 -0
- package/dist/editor/settings/panels/ModelConfigPanel.js +51 -0
- package/dist/editor/settings/panels/ModelConfigPanel.js.map +1 -0
- package/dist/editor/settings/panels/ModelsPanel.js +201 -70
- package/dist/editor/settings/panels/ModelsPanel.js.map +1 -1
- package/dist/editor/settings/panels/ProjectTemplateAgentPanel.d.ts +10 -0
- package/dist/editor/settings/panels/ProjectTemplateAgentPanel.js +46 -0
- package/dist/editor/settings/panels/ProjectTemplateAgentPanel.js.map +1 -0
- package/dist/editor/settings/panels/ProjectTemplatesPanel.d.ts +2 -0
- package/dist/editor/settings/panels/ProjectTemplatesPanel.js +1340 -0
- package/dist/editor/settings/panels/ProjectTemplatesPanel.js.map +1 -0
- package/dist/editor/settings/panels/ProviderConfigPanel.d.ts +10 -0
- package/dist/editor/settings/panels/ProviderConfigPanel.js +32 -0
- package/dist/editor/settings/panels/ProviderConfigPanel.js.map +1 -0
- package/dist/editor/settings/panels/ProvidersPanel.js +46 -4
- package/dist/editor/settings/panels/ProvidersPanel.js.map +1 -1
- package/dist/editor/settings/panels/SearchConfigPanel.js +3 -3
- package/dist/editor/settings/panels/SearchConfigPanel.js.map +1 -1
- package/dist/editor/settings/panels/index.d.ts +1 -2
- package/dist/editor/settings/panels/index.js +1 -2
- package/dist/editor/settings/panels/index.js.map +1 -1
- package/dist/editor/ui/ItemNameDialogNew.js +15 -9
- package/dist/editor/ui/ItemNameDialogNew.js.map +1 -1
- package/dist/editor/utils/keyboardNavigation.d.ts +6 -20
- package/dist/editor/utils/keyboardNavigation.js +48 -139
- package/dist/editor/utils/keyboardNavigation.js.map +1 -1
- package/dist/revision.d.ts +2 -2
- package/dist/revision.js +2 -2
- package/dist/setup/services/setupWizardService.d.ts +8 -10
- package/dist/setup/services/setupWizardService.js +4 -17
- package/dist/setup/services/setupWizardService.js.map +1 -1
- package/dist/splash-screen/ModernSplashScreen.js +100 -18
- package/dist/splash-screen/ModernSplashScreen.js.map +1 -1
- package/dist/splash-screen/ParheliaAssistantChat.js +3 -22
- package/dist/splash-screen/ParheliaAssistantChat.js.map +1 -1
- package/dist/task-board/TaskBoardWorkspace.js +70 -3
- package/dist/task-board/TaskBoardWorkspace.js.map +1 -1
- package/dist/task-board/components/AssignAgentDialog.js +9 -4
- package/dist/task-board/components/AssignAgentDialog.js.map +1 -1
- package/dist/task-board/components/CreateProjectDialog.js +32 -34
- package/dist/task-board/components/CreateProjectDialog.js.map +1 -1
- package/dist/task-board/components/CreateTaskDialog.d.ts +2 -0
- package/dist/task-board/components/CreateTaskDialog.js +35 -11
- package/dist/task-board/components/CreateTaskDialog.js.map +1 -1
- package/dist/task-board/components/ProjectPropertiesPanel.js +4 -1
- package/dist/task-board/components/ProjectPropertiesPanel.js.map +1 -1
- package/dist/task-board/components/TaskAgentPanel.js +13 -4
- package/dist/task-board/components/TaskAgentPanel.js.map +1 -1
- package/dist/task-board/components/TaskAssigneePicker.d.ts +2 -2
- package/dist/task-board/components/TaskAssigneePicker.js +12 -4
- package/dist/task-board/components/TaskAssigneePicker.js.map +1 -1
- package/dist/task-board/components/TaskBoardProjectListSidebar.js.map +1 -1
- package/dist/task-board/components/TaskCard.js +2 -2
- package/dist/task-board/components/TaskCard.js.map +1 -1
- package/dist/task-board/components/TaskDetailPanel.js +2 -2
- package/dist/task-board/components/TaskDetailPanel.js.map +1 -1
- package/dist/task-board/components/TaskRow.js +2 -2
- package/dist/task-board/components/TaskRow.js.map +1 -1
- package/dist/task-board/components/WizardCommunicationCenter.js +10 -4
- package/dist/task-board/components/WizardCommunicationCenter.js.map +1 -1
- package/dist/task-board/services/taskService.d.ts +11 -2
- package/dist/task-board/services/taskService.js +20 -2
- package/dist/task-board/services/taskService.js.map +1 -1
- package/dist/task-board/types.d.ts +52 -7
- package/dist/task-board/views/DependencyGraphView.d.ts +31 -4
- package/dist/task-board/views/DependencyGraphView.js +383 -64
- package/dist/task-board/views/DependencyGraphView.js.map +1 -1
- package/dist/types.d.ts +23 -15
- package/package.json +7 -7
- package/dist/editor/settings/Setup.d.ts +0 -1
- package/dist/editor/settings/Setup.js +0 -211
- package/dist/editor/settings/Setup.js.map +0 -1
- package/dist/editor/settings/panels/DatabasePanel.d.ts +0 -6
- package/dist/editor/settings/panels/DatabasePanel.js +0 -50
- package/dist/editor/settings/panels/DatabasePanel.js.map +0 -1
- package/dist/editor/settings/setup-steps/AiSetupStep/EmbeddingsModelSection.d.ts +0 -2
- package/dist/editor/settings/setup-steps/AiSetupStep/EmbeddingsModelSection.js +0 -195
- package/dist/editor/settings/setup-steps/AiSetupStep/EmbeddingsModelSection.js.map +0 -1
- package/dist/editor/settings/setup-steps/AiSetupStep/index.d.ts +0 -2
- package/dist/editor/settings/setup-steps/AiSetupStep/index.js +0 -21
- package/dist/editor/settings/setup-steps/AiSetupStep/index.js.map +0 -1
- package/dist/editor/settings/setup-steps/AiSetupStep/provider/ProviderSection.d.ts +0 -1
- package/dist/editor/settings/setup-steps/AiSetupStep/provider/ProviderSection.js +0 -233
- package/dist/editor/settings/setup-steps/AiSetupStep/provider/ProviderSection.js.map +0 -1
- package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersList.d.ts +0 -15
- package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersList.js +0 -14
- package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersList.js.map +0 -1
- package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersSection.d.ts +0 -1
- package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersSection.js +0 -94
- package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersSection.js.map +0 -1
- package/dist/editor/settings/setup-steps/AiSetupStep/types.d.ts +0 -1
- package/dist/editor/settings/setup-steps/AiSetupStep/types.js +0 -2
- package/dist/editor/settings/setup-steps/AiSetupStep/types.js.map +0 -1
- package/dist/editor/settings/setup-steps/AiSetupStep/utils.d.ts +0 -5
- package/dist/editor/settings/setup-steps/AiSetupStep/utils.js +0 -44
- package/dist/editor/settings/setup-steps/AiSetupStep/utils.js.map +0 -1
- package/dist/editor/settings/setup-steps/IndexSetupStep.d.ts +0 -2
- package/dist/editor/settings/setup-steps/IndexSetupStep.js +0 -36
- package/dist/editor/settings/setup-steps/IndexSetupStep.js.map +0 -1
- package/dist/editor/settings/setup-steps/SettingsSetupStep.d.ts +0 -2
- package/dist/editor/settings/setup-steps/SettingsSetupStep.js +0 -111
- package/dist/editor/settings/setup-steps/SettingsSetupStep.js.map +0 -1
- package/dist/editor/settings/setup-steps/SetupOverview.d.ts +0 -14
- package/dist/editor/settings/setup-steps/SetupOverview.js +0 -38
- package/dist/editor/settings/setup-steps/SetupOverview.js.map +0 -1
package/dist/config/types.d.ts
CHANGED
|
@@ -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?: {
|
package/dist/editor/Editor.js
CHANGED
|
@@ -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 {
|
|
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
|
-
}, [
|
|
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":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAInD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAQjE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,IAAI,MAAM,YAAY,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"Editor.js","sourceRoot":"","sources":["../../src/editor/Editor.tsx"],"names":[],"mappings":"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"}
|
|
@@ -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":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAe,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,EACL,OAAO,EACP,cAAc,EACd,cAAc,GACf,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;
|
|
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
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
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:
|
|
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
|
-
|
|
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: "
|
|
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 }))] })] }));
|