@alpaca-editor/core 1.0.4013 → 1.0.4014

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 (76) hide show
  1. package/dist/editor/Terminal.d.ts +6 -0
  2. package/dist/editor/Terminal.js +10 -4
  3. package/dist/editor/Terminal.js.map +1 -1
  4. package/dist/editor/ai/Agents.js +133 -13
  5. package/dist/editor/ai/Agents.js.map +1 -1
  6. package/dist/editor/ai/AiTerminal.d.ts +2 -1
  7. package/dist/editor/ai/AiTerminal.js +86 -139
  8. package/dist/editor/ai/AiTerminal.js.map +1 -1
  9. package/dist/editor/media-selector/AiImageSearch.js +2 -1
  10. package/dist/editor/media-selector/AiImageSearch.js.map +1 -1
  11. package/dist/editor/media-selector/AiImageSearchPrompt.js +2 -1
  12. package/dist/editor/media-selector/AiImageSearchPrompt.js.map +1 -1
  13. package/dist/editor/page-editor-chrome/useInlineAICompletion.js +4 -2
  14. package/dist/editor/page-editor-chrome/useInlineAICompletion.js.map +1 -1
  15. package/dist/editor/services/agentService.d.ts +59 -0
  16. package/dist/editor/services/agentService.js +26 -0
  17. package/dist/editor/services/agentService.js.map +1 -0
  18. package/dist/editor/services/aiService.d.ts +22 -4
  19. package/dist/editor/services/aiService.js +131 -20
  20. package/dist/editor/services/aiService.js.map +1 -1
  21. package/dist/editor/services/contextService.js +6 -4
  22. package/dist/editor/services/contextService.js.map +1 -1
  23. package/dist/editor/sidebar/SidebarView.js +2 -5
  24. package/dist/editor/sidebar/SidebarView.js.map +1 -1
  25. package/dist/editor/sidebar/ViewSelector.js +1 -1
  26. package/dist/editor/sidebar/ViewSelector.js.map +1 -1
  27. package/dist/editor/ui/SimpleIconButton.d.ts +2 -2
  28. package/dist/editor/ui/SimpleIconButton.js +5 -3
  29. package/dist/editor/ui/SimpleIconButton.js.map +1 -1
  30. package/dist/editor/utils/jsonCleaner.d.ts +8 -0
  31. package/dist/editor/utils/jsonCleaner.js +76 -0
  32. package/dist/editor/utils/jsonCleaner.js.map +1 -0
  33. package/dist/editor/views/CompareView.js +2 -2
  34. package/dist/editor/views/CompareView.js.map +1 -1
  35. package/dist/page-wizard/steps/ContentStep.js +7 -2
  36. package/dist/page-wizard/steps/ContentStep.js.map +1 -1
  37. package/dist/page-wizard/steps/FindItemsStep.js +4 -1
  38. package/dist/page-wizard/steps/FindItemsStep.js.map +1 -1
  39. package/dist/page-wizard/steps/ImagesStep.js +13 -7
  40. package/dist/page-wizard/steps/ImagesStep.js.map +1 -1
  41. package/dist/page-wizard/steps/LayoutStep.d.ts +1 -1
  42. package/dist/page-wizard/steps/LayoutStep.js +22 -20
  43. package/dist/page-wizard/steps/LayoutStep.js.map +1 -1
  44. package/dist/page-wizard/steps/MetaDataStep.js +8 -15
  45. package/dist/page-wizard/steps/MetaDataStep.js.map +1 -1
  46. package/dist/page-wizard/steps/SelectStep.js +9 -4
  47. package/dist/page-wizard/steps/SelectStep.js.map +1 -1
  48. package/dist/page-wizard/steps/StructureStep.js +3 -1
  49. package/dist/page-wizard/steps/StructureStep.js.map +1 -1
  50. package/dist/revision.d.ts +2 -2
  51. package/dist/revision.js +2 -2
  52. package/dist/styles.css +10 -11
  53. package/package.json +1 -1
  54. package/src/editor/Terminal.tsx +12 -3
  55. package/src/editor/ai/Agents.tsx +212 -16
  56. package/src/editor/ai/AiTerminal.tsx +113 -173
  57. package/src/editor/ai/GhostWriter.tsx_ +3 -3
  58. package/src/editor/media-selector/AiImageSearch.tsx +2 -2
  59. package/src/editor/media-selector/AiImageSearchPrompt.tsx +2 -2
  60. package/src/editor/page-editor-chrome/useInlineAICompletion.tsx +5 -5
  61. package/src/editor/services/agentService.ts +83 -0
  62. package/src/editor/services/aiService.ts +176 -33
  63. package/src/editor/services/contextService.ts +5 -6
  64. package/src/editor/sidebar/SidebarView.tsx +10 -6
  65. package/src/editor/sidebar/ViewSelector.tsx +2 -2
  66. package/src/editor/ui/SimpleIconButton.tsx +20 -14
  67. package/src/editor/utils/jsonCleaner.ts +92 -0
  68. package/src/editor/views/CompareView.tsx +2 -2
  69. package/src/page-wizard/steps/ContentStep.tsx +10 -9
  70. package/src/page-wizard/steps/FindItemsStep.tsx +7 -5
  71. package/src/page-wizard/steps/ImagesStep.tsx +16 -11
  72. package/src/page-wizard/steps/LayoutStep.tsx +24 -28
  73. package/src/page-wizard/steps/MetaDataStep.tsx +11 -21
  74. package/src/page-wizard/steps/SelectStep.tsx +11 -8
  75. package/src/page-wizard/steps/StructureStep.tsx +4 -5
  76. package/src/revision.ts +2 -2
@@ -1,4 +1,8 @@
1
1
  import React from "react";
2
+ type Message = {
3
+ text: React.ReactNode;
4
+ type: "command" | "response";
5
+ };
2
6
  export declare const Terminal: React.ForwardRefExoticComponent<{
3
7
  commandHandler: (text: string, callback: (text: React.ReactNode, finished: boolean) => void) => void;
4
8
  prompt: string;
@@ -9,6 +13,8 @@ export declare const Terminal: React.ForwardRefExoticComponent<{
9
13
  infobar?: React.ReactNode;
10
14
  disabled?: boolean;
11
15
  className?: string;
16
+ initialMessages?: Message[];
12
17
  } & React.RefAttributes<{
13
18
  submit: () => void;
14
19
  }>>;
20
+ export {};
@@ -5,7 +5,7 @@ import { classNames } from "primereact/utils";
5
5
  import { SimpleIconButton } from "./ui/SimpleIconButton";
6
6
  import { Trash2, Send } from "lucide-react";
7
7
  export const Terminal = forwardRef((props, ref) => {
8
- const { commandHandler, prompt, setPrompt, onReset, toolbar, statusbar, infobar, disabled, className, } = props;
8
+ const { commandHandler, prompt, setPrompt, onReset, toolbar, statusbar, infobar, disabled, className, initialMessages, } = props;
9
9
  const [response, setResponse] = useState();
10
10
  const [messages, setMessages] = useState([]);
11
11
  const bottomRef = useRef(null);
@@ -29,6 +29,12 @@ export const Terminal = forwardRef((props, ref) => {
29
29
  useEffect(() => {
30
30
  messageRef.current = messages;
31
31
  }, [messages]);
32
+ // Set initial messages if provided
33
+ useEffect(() => {
34
+ if (initialMessages && initialMessages.length > 0 && messages.length === 0) {
35
+ setMessages(initialMessages);
36
+ }
37
+ }, [initialMessages]);
32
38
  const callback = (text, finished) => {
33
39
  if (!finished)
34
40
  setResponse(text);
@@ -81,11 +87,11 @@ export const Terminal = forwardRef((props, ref) => {
81
87
  // Scroll to bottom every time messages or response changes.
82
88
  bottomRef.current?.scrollIntoView({ behavior: "smooth" });
83
89
  }, [messages, response]);
84
- const responseBoxClasses = "text-xs self-stretch text-gray-700 p-2 rounded shadow border border-gray-200";
90
+ const responseBoxClasses = "text-xs self-stretch text-gray-700 p-2 rounded border border-theme-secondary bg-theme-secondary-light";
85
91
  const getClasses = (m) => {
86
92
  if (m.type === "response")
87
93
  return responseBoxClasses;
88
- return "text-xs text-gray-700 bg-indigo-100 p-2 rounded prompt";
94
+ return "text-xs text-gray-700 bg-indigo-100 border border-indigo-300 p-2 rounded prompt";
89
95
  };
90
96
  // Expose the submit function via the ref.
91
97
  const submit = () => {
@@ -98,7 +104,7 @@ export const Terminal = forwardRef((props, ref) => {
98
104
  }
99
105
  setMessages([...messages, { type: "command", text: prompt }]);
100
106
  setPrompt("");
101
- setResponse("...");
107
+ setResponse("");
102
108
  commandHandler(prompt, callback);
103
109
  };
104
110
  useImperativeHandle(ref, () => ({
@@ -1 +1 @@
1
- {"version":3,"file":"Terminal.js","sourceRoot":"","sources":["../../src/editor/Terminal.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Terminal.js","sourceRoot":"","sources":["../../src/editor/Terminal.tsx"],"names":[],"mappings":"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"}
@@ -1,19 +1,109 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useState, useRef } from "react";
2
+ import { useState, useRef, useEffect } from "react";
3
3
  import { EditorAiTerminal } from "./EditorAiTerminal";
4
4
  import { SimpleIconButton } from "../ui/SimpleIconButton";
5
- import { Plus, X } from "lucide-react";
5
+ import { Plus, X, History } from "lucide-react";
6
6
  import { cn } from "../../lib/utils";
7
+ import { getAgents, getAgent, getChatHistory } from "../services/agentService";
8
+ import { Popover, PopoverContent, PopoverTrigger, } from "../../components/ui/popover";
9
+ function convertAgentMessagesToTerminalMessages(agentMessages) {
10
+ return agentMessages.map(msg => ({
11
+ id: msg.id,
12
+ content: msg.content,
13
+ name: msg.name,
14
+ role: msg.role,
15
+ tool_calls: msg.functionName ? [{
16
+ id: msg.toolCallId || msg.id,
17
+ displayName: msg.functionName,
18
+ function: {
19
+ name: msg.functionName,
20
+ arguments: msg.functionArguments || ""
21
+ }
22
+ }] : [],
23
+ tool_call_id: msg.toolCallId
24
+ }));
25
+ }
7
26
  export function Agents({ closeButton, initialOptions, }) {
8
- const [terminals, setTerminals] = useState([
9
- {
10
- id: "terminal-1",
11
- title: "Agent 1",
12
- options: initialOptions,
13
- },
14
- ]);
15
- const [activeTerminalId, setActiveTerminalId] = useState("terminal-1");
16
- const nextTerminalNumber = useRef(2);
27
+ const [terminals, setTerminals] = useState([]);
28
+ const [activeTerminalId, setActiveTerminalId] = useState(null);
29
+ const [inactiveAgents, setInactiveAgents] = useState([]);
30
+ const [historyPopoverOpen, setHistoryPopoverOpen] = useState(false);
31
+ const [loadingAgents, setLoadingAgents] = useState(true);
32
+ const nextTerminalNumber = useRef(1);
33
+ // Load agents from backend on mount
34
+ useEffect(() => {
35
+ loadAgentsFromBackend();
36
+ }, []);
37
+ const loadAgentsFromBackend = async () => {
38
+ try {
39
+ setLoadingAgents(true);
40
+ // Load active agents
41
+ const activeAgentsResult = await getAgents("active");
42
+ // Load inactive agents for history
43
+ const inactiveAgentsResult = await getChatHistory("completed", 20);
44
+ if (activeAgentsResult.type === "success" && activeAgentsResult.data) {
45
+ const activeAgents = activeAgentsResult.data;
46
+ // Create terminals for active agents
47
+ const activeTerminals = await Promise.all(activeAgents.map(async (agent, index) => {
48
+ // Load messages for each active agent
49
+ const agentWithMessages = await loadAgentMessages(agent.id);
50
+ return {
51
+ id: `agent-${agent.id}`,
52
+ title: agent.name || `Agent ${index + 1}`,
53
+ agentId: agent.id,
54
+ options: initialOptions,
55
+ messages: agentWithMessages?.messages ? convertAgentMessagesToTerminalMessages(agentWithMessages.messages) : []
56
+ };
57
+ }));
58
+ setTerminals(activeTerminals);
59
+ // Set the first active terminal as active, or create a new one if none exist
60
+ if (activeTerminals.length > 0) {
61
+ setActiveTerminalId(activeTerminals[0].id);
62
+ }
63
+ else {
64
+ // Create a default terminal if no active agents
65
+ const defaultTerminal = {
66
+ id: `terminal-${nextTerminalNumber.current}`,
67
+ title: `Agent ${nextTerminalNumber.current}`,
68
+ options: initialOptions,
69
+ };
70
+ setTerminals([defaultTerminal]);
71
+ setActiveTerminalId(defaultTerminal.id);
72
+ nextTerminalNumber.current++;
73
+ }
74
+ }
75
+ if (inactiveAgentsResult.type === "success" && inactiveAgentsResult.data) {
76
+ setInactiveAgents(inactiveAgentsResult.data);
77
+ }
78
+ }
79
+ catch (error) {
80
+ console.error("Failed to load agents:", error);
81
+ // Create a default terminal on error
82
+ const defaultTerminal = {
83
+ id: `terminal-${nextTerminalNumber.current}`,
84
+ title: `Agent ${nextTerminalNumber.current}`,
85
+ options: initialOptions,
86
+ };
87
+ setTerminals([defaultTerminal]);
88
+ setActiveTerminalId(defaultTerminal.id);
89
+ nextTerminalNumber.current++;
90
+ }
91
+ finally {
92
+ setLoadingAgents(false);
93
+ }
94
+ };
95
+ const loadAgentMessages = async (agentId) => {
96
+ try {
97
+ const result = await getAgent(agentId);
98
+ if (result.type === "success" && result.data) {
99
+ return result.data;
100
+ }
101
+ }
102
+ catch (error) {
103
+ console.error(`Failed to load messages for agent ${agentId}:`, error);
104
+ }
105
+ return null;
106
+ };
17
107
  const addTerminal = () => {
18
108
  const newTerminal = {
19
109
  id: `terminal-${nextTerminalNumber.current}`,
@@ -38,11 +128,41 @@ export function Agents({ closeButton, initialOptions, }) {
38
128
  return filtered;
39
129
  });
40
130
  };
41
- return (_jsxs("div", { className: "flex h-full flex-col", children: [_jsxs("div", { className: "flex items-center border-b border-gray-200 bg-gray-50", children: [_jsx("div", { className: "flex flex-1 overflow-x-auto", children: terminals.map((terminal) => (_jsxs("div", { className: cn("flex min-w-0 cursor-pointer items-center gap-1 border-r border-gray-200 px-3 py-2 text-sm", activeTerminalId === terminal.id
131
+ const openAgentFromHistory = async (agent) => {
132
+ // Check if this agent is already open as a terminal
133
+ const existingTerminal = terminals.find(t => t.agentId === agent.id);
134
+ if (existingTerminal) {
135
+ // Switch to existing terminal
136
+ setActiveTerminalId(existingTerminal.id);
137
+ setHistoryPopoverOpen(false);
138
+ return;
139
+ }
140
+ // Load the agent with messages
141
+ const agentWithMessages = await loadAgentMessages(agent.id);
142
+ // Create new terminal for this agent
143
+ const newTerminal = {
144
+ id: `agent-${agent.id}`,
145
+ title: agent.name,
146
+ agentId: agent.id,
147
+ options: initialOptions,
148
+ messages: agentWithMessages?.messages ? convertAgentMessagesToTerminalMessages(agentWithMessages.messages) : []
149
+ };
150
+ setTerminals((prev) => [...prev, newTerminal]);
151
+ setActiveTerminalId(newTerminal.id);
152
+ setHistoryPopoverOpen(false);
153
+ };
154
+ if (loadingAgents) {
155
+ return (_jsx("div", { className: "flex h-full items-center justify-center", children: _jsx("div", { className: "text-sm text-gray-500", children: "Loading agents..." }) }));
156
+ }
157
+ return (_jsxs("div", { className: "flex h-full flex-col", children: [_jsxs("div", { className: "flex items-center border-b border-gray-200 bg-gray-50", children: [_jsx("div", { className: "flex flex-1 overflow-x-auto", children: terminals.map((terminal) => (_jsxs("div", { className: cn("flex min-w-0 cursor-pointer items-center gap-1 border-r border-gray-200 px-3 py-2 text-xs", activeTerminalId === terminal.id
42
158
  ? "border-b-white bg-white"
43
159
  : "hover:bg-gray-100"), onClick: () => setActiveTerminalId(terminal.id), children: [_jsx("span", { className: "truncate", children: terminal.title }), terminals.length > 1 && (_jsx(SimpleIconButton, { onClick: (e) => {
44
160
  e.stopPropagation();
45
161
  closeTerminal(terminal.id);
46
- }, icon: _jsx(X, { className: "size-3" }), label: "Close", className: "ml-1 opacity-60 hover:opacity-100" }))] }, terminal.id))) }), _jsx("div", { className: "flex items-center px-2", children: _jsx(SimpleIconButton, { onClick: addTerminal, icon: _jsx(Plus, { className: "size-4" }), label: "Add Terminal", className: "text-gray-600 hover:text-gray-800" }) }), closeButton && (_jsx("div", { className: "flex items-center px-2", children: closeButton }))] }), _jsx("div", { className: "relative flex-1", children: terminals.map((terminal) => (_jsx("div", { className: cn("absolute inset-0", activeTerminalId === terminal.id ? "block" : "hidden"), children: _jsx(EditorAiTerminal, { options: terminal.options }) }, terminal.id))) })] }));
162
+ }, icon: _jsx(X, { className: "size-2" }), label: "Close", className: "ml-1 opacity-60 hover:opacity-100" }))] }, terminal.id))) }), _jsx("div", { className: "flex items-center px-1", children: _jsxs(Popover, { open: historyPopoverOpen, onOpenChange: setHistoryPopoverOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx(SimpleIconButton, { onClick: () => { }, icon: _jsx(History, { className: "size-4" }), label: "Agent History", className: "text-gray-600 hover:text-gray-800" }) }), _jsxs(PopoverContent, { className: "w-64 p-0", align: "end", children: [_jsx("div", { className: "px-3 py-2 text-xs font-medium text-gray-500 border-b border-gray-100", children: "Agent History" }), _jsx("div", { className: "max-h-80 overflow-y-auto", children: inactiveAgents.length === 0 ? (_jsx("div", { className: "px-3 py-2 text-xs text-gray-500", children: "No previous agents found" })) : (inactiveAgents.map((agent) => (_jsxs("div", { className: "cursor-pointer px-3 py-2 text-xs hover:bg-gray-50 border-b border-gray-50", onClick: () => openAgentFromHistory(agent), children: [_jsx("div", { className: "font-medium text-gray-900 truncate", children: agent.name }), _jsx("div", { className: "text-gray-500 truncate", children: agent.profileName }), _jsx("div", { className: "text-gray-400 text-xs", children: new Date(agent.updatedDate).toLocaleString() })] }, agent.id)))) })] })] }) }), _jsx("div", { className: "flex items-center px-1", children: _jsx(SimpleIconButton, { onClick: addTerminal, icon: _jsx(Plus, { className: "size-4" }), label: "Add Terminal", className: "text-gray-600 hover:text-gray-800" }) }), closeButton && (_jsx("div", { className: "flex items-center px-2", children: closeButton }))] }), _jsx("div", { className: "relative flex-1", children: terminals.map((terminal) => (_jsx("div", { className: cn("absolute inset-0", activeTerminalId === terminal.id ? "block" : "hidden"), children: _jsx(EditorAiTerminal, { options: {
163
+ ...terminal.options,
164
+ // Pass the pre-loaded messages to the terminal
165
+ initialMessages: terminal.messages
166
+ } }) }, terminal.id))) })] }));
47
167
  }
48
168
  //# sourceMappingURL=Agents.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Agents.js","sourceRoot":"","sources":["../../../src/editor/ai/Agents.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Agents.js","sourceRoot":"","sources":["../../../src/editor/ai/Agents.tsx"],"names":[],"mappings":"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"}
@@ -16,7 +16,7 @@ export type ToolCall = {
16
16
  };
17
17
  };
18
18
  export type Message = {
19
- id: number;
19
+ id: string;
20
20
  content: string;
21
21
  formattedContent?: string;
22
22
  name: string;
@@ -32,6 +32,7 @@ export type AiContext = {
32
32
  export type AiTerminalOptions = {
33
33
  initialPrompt?: string;
34
34
  hiddenSystemPrompt?: string;
35
+ initialMessages?: Message[];
35
36
  };
36
37
  export declare function AiTerminal({ closeButton, createAiContext, defaultProfile, options, }: {
37
38
  closeButton?: React.ReactNode;
@@ -5,10 +5,9 @@ import { TerminalService } from "primereact/terminalservice";
5
5
  import { Terminal } from "../Terminal";
6
6
  import { useEditContext } from "../client/editContext";
7
7
  import { Dropdown } from "primereact/dropdown";
8
- import Cookies from "universal-cookie";
9
8
  import { WizardIcon } from "../ui/Icons";
10
9
  import { AiResponseMessage } from "./AiResponseMessage";
11
- import { loadAiProfiles } from "../services/aiService";
10
+ import { loadAiProfiles, executePrompt, } from "../services/aiService";
12
11
  import { SimpleIconButton } from "../ui/SimpleIconButton";
13
12
  import { Settings } from "lucide-react";
14
13
  export function AiTerminal({ closeButton, createAiContext, defaultProfile, options, }) {
@@ -16,7 +15,7 @@ export function AiTerminal({ closeButton, createAiContext, defaultProfile, optio
16
15
  const [showPredefined, setShowPredefined] = useState(false);
17
16
  if (!editContext)
18
17
  return null;
19
- const [messages, setMessages] = useState([]);
18
+ const [messages, setMessages] = useState(options?.initialMessages || []);
20
19
  const [response, setResponse] = useState();
21
20
  const [model, setModel] = useState();
22
21
  const [prompt, setPrompt] = useState("");
@@ -26,7 +25,7 @@ export function AiTerminal({ closeButton, createAiContext, defaultProfile, optio
26
25
  const [agentId] = useState(() => crypto.randomUUID());
27
26
  const selection = editContext.selection;
28
27
  const terminalRef = useRef(null);
29
- const [responseMessages, setResponseMessages] = useState([]);
28
+ const [responseMessages, setResponseMessages] = useState(options?.initialMessages || []);
30
29
  const [showSettings, setShowSettings] = useState(false);
31
30
  const settingsRef = useRef(null);
32
31
  useEffect(() => {
@@ -60,6 +59,71 @@ export function AiTerminal({ closeButton, createAiContext, defaultProfile, optio
60
59
  useEffect(() => {
61
60
  messagesRef.current = responseMessages;
62
61
  }, [responseMessages]);
62
+ const [initialTerminalMessages, setInitialTerminalMessages] = useState(undefined);
63
+ // Effect to set up initial messages for display
64
+ useEffect(() => {
65
+ if (options?.initialMessages && options.initialMessages.length > 0) {
66
+ console.log("AiTerminal: Loading initial messages", options.initialMessages);
67
+ // Format the initial messages for display
68
+ const formattedMessages = options.initialMessages.map((message) => {
69
+ const formattedContent = message.content
70
+ ?.trim()
71
+ ?.replaceAll("\n", "<br>")
72
+ ?.replace(/\*\*(.*?)\*\*/g, "<b>$1</b>") || "";
73
+ return {
74
+ ...message,
75
+ content: message.content || "",
76
+ formattedContent: formattedContent,
77
+ tool_calls: message.tool_calls || [],
78
+ };
79
+ });
80
+ console.log("AiTerminal: Formatted messages", formattedMessages);
81
+ // Update the internal message states
82
+ setMessages(formattedMessages);
83
+ setResponseMessages(formattedMessages);
84
+ // Create a response object for internal state
85
+ const initialResponse = {
86
+ messages: formattedMessages,
87
+ editOperations: [],
88
+ numInputTokens: 0,
89
+ numOutputTokens: 0,
90
+ numCachedTokens: 0,
91
+ state: "loaded"
92
+ };
93
+ console.log("AiTerminal: Setting response", initialResponse);
94
+ setResponse(initialResponse);
95
+ // Create individual Terminal messages for each conversation message
96
+ const terminalMessages = [];
97
+ formattedMessages.forEach((message) => {
98
+ if (message.role === "user") {
99
+ // User messages appear as commands
100
+ terminalMessages.push({
101
+ type: "command",
102
+ text: message.content
103
+ });
104
+ }
105
+ else if (message.role === "assistant") {
106
+ // Assistant messages appear as responses
107
+ terminalMessages.push({
108
+ type: "response",
109
+ text: (_jsx("div", { dangerouslySetInnerHTML: {
110
+ __html: message.formattedContent || message.content || "",
111
+ } }))
112
+ });
113
+ }
114
+ // Add tool calls if present
115
+ if (message.tool_calls && message.tool_calls.length > 0) {
116
+ message.tool_calls.forEach((toolCall) => {
117
+ terminalMessages.push({
118
+ type: "response",
119
+ text: (_jsxs("div", { className: "text-xs text-gray-400", children: ["\uD83D\uDD27 ", toolCall.displayName] }))
120
+ });
121
+ });
122
+ }
123
+ });
124
+ setInitialTerminalMessages(terminalMessages);
125
+ }
126
+ }, [options?.initialMessages]);
63
127
  // Handle click outside for settings popover
64
128
  useEffect(() => {
65
129
  function handleClickOutside(event) {
@@ -81,12 +145,12 @@ export function AiTerminal({ closeButton, createAiContext, defaultProfile, optio
81
145
  if (updatedMessages && Array.isArray(updatedMessages)) {
82
146
  const formattedMessages = updatedMessages.map((message) => {
83
147
  const formattedContent = message.content
84
- .trim()
85
- .replaceAll("\n", "<br>")
86
- ?.replace(/\*\*(.*?)\*\*/g, "<b>$1</b>");
148
+ ?.trim()
149
+ ?.replaceAll("\n", "<br>")
150
+ ?.replace(/\*\*(.*?)\*\*/g, "<b>$1</b>") || "";
87
151
  return {
88
152
  ...message,
89
- content: message.content,
153
+ content: message.content || "",
90
154
  formattedContent: formattedContent,
91
155
  tool_calls: message.tool_calls || [],
92
156
  };
@@ -103,7 +167,7 @@ export function AiTerminal({ closeButton, createAiContext, defaultProfile, optio
103
167
  }
104
168
  async function commandHandler(text, callback) {
105
169
  const userMessage = {
106
- id: Date.now(), // Add unique id
170
+ id: crypto.randomUUID(), // Add unique id
107
171
  content: text,
108
172
  role: "user",
109
173
  name: "user",
@@ -123,62 +187,24 @@ export function AiTerminal({ closeButton, createAiContext, defaultProfile, optio
123
187
  role: "system",
124
188
  name: "system",
125
189
  content: options.hiddenSystemPrompt,
126
- id: 0, // System message id
190
+ id: crypto.randomUUID(), // Use UUID instead of hardcoded 0
127
191
  toolCalls: [],
128
192
  },
129
193
  ]
130
194
  : []),
131
195
  ...conversationHistory,
132
196
  ];
133
- const response = await executePrompt(activeProfile.id, messages, selection, editContext.sessionId, model, selectedText, context, agentId, (response) => {
197
+ const response = await executePrompt(messages, context, {
198
+ profileId: activeProfile.id,
199
+ selection,
200
+ selectedText,
201
+ model,
202
+ sessionId: editContext.sessionId,
203
+ agentId,
204
+ addSelectedComponents: true,
205
+ }, undefined, (response) => {
134
206
  setResponse(response);
135
207
  handleResponse(response, callback, false);
136
- // if (response.editOperations.length) {
137
- // if (!editContext) return;
138
- // const newOps = response.editOperations.slice(lastOpIndex);
139
- // if (newOps.length === 0) return;
140
- // const isEditTextFieldOp = (op: EditOperation) => {
141
- // if (op.type !== "edit-field") return false;
142
- // const editFieldOp = op as EditFieldOperation;
143
- // return (
144
- // editFieldOp.fieldType &&
145
- // editFieldOp.fieldType.indexOf("text") !== -1
146
- // );
147
- // };
148
- // const isEditTextField = isEditTextFieldOp(newOps[newOps.length - 1]);
149
- // if (isEditTextField) lastOpIndex = response.editOperations.length - 1;
150
- // else lastOpIndex = response.editOperations.length;
151
- // newOps.forEach((op: EditOperation) => {
152
- // if (isEditTextFieldOp(op)) {
153
- // const editFieldOp = op as EditFieldOperation;
154
- // if (editFieldOp.itemId) {
155
- // const fieldDescriptor = {
156
- // item: {
157
- // ...editFieldOp.mainItem,
158
- // id: editFieldOp.itemId,
159
- // },
160
- // fieldId: editFieldOp.fieldId,
161
- // };
162
- // editContext.itemsRepository.updateFieldValue(
163
- // fieldDescriptor,
164
- // editFieldOp.user ?? { name: "unknown", ai: false },
165
- // false,
166
- // editFieldOp.value,
167
- // );
168
- // editContext.select([editFieldOp.itemId]);
169
- // editContext.setScrollIntoView(editFieldOp.itemId);
170
- // editContext?.setFocusedField(fieldDescriptor, false);
171
- // }
172
- // } else {
173
- // const addOp = op as AddComponentOperation;
174
- // if (op.type === "add-component" && addOp.componentId) {
175
- // const newComponentId = addOp.componentId;
176
- // editContext.select([newComponentId]);
177
- // editContext.setScrollIntoView(newComponentId);
178
- // }
179
- // }
180
- // });
181
- // }
182
208
  });
183
209
  if (response) {
184
210
  handleResponse(response, callback, true);
@@ -201,11 +227,12 @@ export function AiTerminal({ closeButton, createAiContext, defaultProfile, optio
201
227
  TerminalService.off("command", commandHandler);
202
228
  };
203
229
  }, []);
204
- return (_jsx("div", { className: "relative flex h-full flex-1 flex-col pl-1.5", "data-testid": "ai-terminal", children: _jsxs("div", { className: "relative flex-1", children: [_jsx("div", { className: "tour-ai-terminal absolute inset-0", children: _jsx(Terminal, { disabled: !model, ref: terminalRef, onReset: () => {
230
+ return (_jsx("div", { className: "relative flex h-full flex-1 flex-col", "data-testid": "ai-terminal", children: _jsxs("div", { className: "relative flex-1", children: [_jsx("div", { className: "tour-ai-terminal absolute inset-0", children: _jsx(Terminal, { disabled: !model, ref: terminalRef, onReset: () => {
205
231
  setMessages([]);
206
232
  setResponseMessages([]);
207
233
  setResponse(undefined);
208
- }, infobar: response?.numInputTokens && (_jsxs("div", { className: "text-right text-gray-400", style: { fontSize: "10px" }, children: ["Tokens in: ", response?.numInputTokens?.toLocaleString(), " out:", " ", response?.numOutputTokens?.toLocaleString(), " ", response?.numCachedTokens
234
+ setInitialTerminalMessages(undefined);
235
+ }, initialMessages: initialTerminalMessages, infobar: response?.numInputTokens && (_jsxs("div", { className: "text-right text-gray-400", style: { fontSize: "10px" }, children: ["Tokens in: ", response?.numInputTokens?.toLocaleString(), " out:", " ", response?.numOutputTokens?.toLocaleString(), " ", response?.numCachedTokens
209
236
  ? `cached: ${response?.numCachedTokens?.toLocaleString()} `
210
237
  : "", response?.state] })), prompt: prompt, setPrompt: setPrompt, statusbar: _jsxs("div", { className: "flex flex-1 items-center justify-between gap-1", children: [_jsxs("a", { className: "ml-1 flex cursor-pointer items-center gap-1 text-xs", onClick: () => {
211
238
  setShowPredefined(!showPredefined);
@@ -219,84 +246,4 @@ export function AiTerminal({ closeButton, createAiContext, defaultProfile, optio
219
246
  commandHandler(v, callback);
220
247
  } }) }), activeProfile?.errorMessage && (_jsx("div", { className: "absolute inset-0 grid items-center justify-center p-2 text-sm text-red-500", children: activeProfile?.errorMessage })), !model && (_jsx("div", { className: "absolute inset-0 grid items-center justify-center text-sm text-gray-400", children: !activeProfile ? "No profile selected" : "No model selected" }))] }) }));
221
248
  }
222
- async function executePrompt(profileId, messages, selection, session, model, selectedText, context, agentId, callback) {
223
- const response = await fetch(context.endpoint, {
224
- method: "POST",
225
- body: JSON.stringify({
226
- ...context.promptData,
227
- profileId,
228
- messages,
229
- selection,
230
- addSelectedComponents: true,
231
- selectedText,
232
- model,
233
- sessionId: session,
234
- agentId,
235
- }),
236
- credentials: "include",
237
- headers: {
238
- "Content-Type": "application/json",
239
- Cookie: new Cookies().getAll(),
240
- },
241
- });
242
- if (!response.ok) {
243
- const text = await response.text();
244
- return {
245
- messages: [
246
- {
247
- content: "There was an error processing your request: " + text,
248
- id: 0,
249
- name: "assistant",
250
- role: "assistant",
251
- },
252
- ],
253
- editOperations: [],
254
- numInputTokens: 0,
255
- numOutputTokens: 0,
256
- numCachedTokens: 0,
257
- state: "error",
258
- };
259
- }
260
- if (!response?.body)
261
- return null;
262
- const reader = response.body.getReader();
263
- const decoder = new TextDecoder();
264
- let buffer = "";
265
- let result = null;
266
- while (true) {
267
- const { done, value } = await reader.read();
268
- if (done) {
269
- break;
270
- }
271
- buffer += decoder.decode(value, { stream: true }); // 'stream: true' ensures that any incomplete multi-byte characters aren't malformed.
272
- // Split the buffer by newline and keep the last partial line for the next iteration.
273
- const lines = buffer.split("\n");
274
- if (lines.length > 0) {
275
- buffer = lines.pop() || ""; // Incomplete line (if any) is kept for the next iteration.
276
- for (let line of lines) {
277
- if (line.trim() === "")
278
- continue; // Skip empty lines if any.
279
- try {
280
- const jsonData = JSON.parse(line);
281
- callback(jsonData);
282
- result = jsonData;
283
- }
284
- catch (e) {
285
- console.error("Error parsing line:" + line, e);
286
- }
287
- }
288
- }
289
- }
290
- // If there's any remaining content in the buffer after processing all chunks, try to process it.
291
- if (buffer.trim() !== "") {
292
- try {
293
- const jsonData = JSON.parse(buffer);
294
- result = jsonData;
295
- }
296
- catch (e) {
297
- console.error("Error parsing the final buffer content:", e);
298
- }
299
- }
300
- return result;
301
- }
302
249
  //# sourceMappingURL=AiTerminal.js.map