@alpaca-editor/core 1.0.4135 → 1.0.4141
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/components/index.d.ts +2 -0
- package/dist/components/index.js +1 -0
- package/dist/components/index.js.map +1 -1
- package/dist/components/ui/select.d.ts +2 -1
- package/dist/components/ui/select.js +2 -2
- package/dist/components/ui/select.js.map +1 -1
- package/dist/components/ui/tabs.d.ts +17 -0
- package/dist/components/ui/tabs.js +27 -0
- package/dist/components/ui/tabs.js.map +1 -0
- package/dist/config/config.js +7 -1
- package/dist/config/config.js.map +1 -1
- package/dist/editor/FieldListField.js +3 -4
- package/dist/editor/FieldListField.js.map +1 -1
- package/dist/editor/ImageEditButton.d.ts +2 -1
- package/dist/editor/ImageEditButton.js +4 -4
- package/dist/editor/ImageEditButton.js.map +1 -1
- package/dist/editor/PictureEditor.js +42 -1
- package/dist/editor/PictureEditor.js.map +1 -1
- package/dist/editor/Terminal.js +1 -1
- package/dist/editor/Terminal.js.map +1 -1
- package/dist/editor/Titlebar.js +0 -1
- package/dist/editor/Titlebar.js.map +1 -1
- package/dist/editor/ai/AgentCostDisplay.d.ts +3 -1
- package/dist/editor/ai/AgentCostDisplay.js +26 -2
- package/dist/editor/ai/AgentCostDisplay.js.map +1 -1
- package/dist/editor/ai/AgentStatusBadge.d.ts +26 -0
- package/dist/editor/ai/AgentStatusBadge.js +110 -0
- package/dist/editor/ai/AgentStatusBadge.js.map +1 -0
- package/dist/editor/ai/AgentTerminal.js +289 -198
- package/dist/editor/ai/AgentTerminal.js.map +1 -1
- package/dist/editor/ai/Agents.d.ts +2 -2
- package/dist/editor/ai/Agents.js +115 -19
- package/dist/editor/ai/Agents.js.map +1 -1
- package/dist/editor/ai/AiResponseMessage.js +259 -45
- package/dist/editor/ai/AiResponseMessage.js.map +1 -1
- package/dist/editor/ai/ContextInfoBar.js +124 -113
- package/dist/editor/ai/ContextInfoBar.js.map +1 -1
- package/dist/editor/ai/ToolCallDisplay.d.ts +1 -0
- package/dist/editor/ai/ToolCallDisplay.js +70 -58
- package/dist/editor/ai/ToolCallDisplay.js.map +1 -1
- package/dist/editor/ai/useAgentStatus.d.ts +13 -0
- package/dist/editor/ai/useAgentStatus.js +101 -0
- package/dist/editor/ai/useAgentStatus.js.map +1 -0
- package/dist/editor/client/EditorShell.js +23 -8
- package/dist/editor/client/EditorShell.js.map +1 -1
- package/dist/editor/client/itemsRepository.js.map +1 -1
- package/dist/editor/commands/localizeItem/LocalizeItemDialog.js +5 -5
- package/dist/editor/commands/localizeItem/LocalizeItemDialog.js.map +1 -1
- package/dist/editor/control-center/About.js +1 -1
- package/dist/editor/control-center/About.js.map +1 -1
- package/dist/editor/control-center/AllAgentsPanel.d.ts +5 -0
- package/dist/editor/control-center/AllAgentsPanel.js +126 -0
- package/dist/editor/control-center/AllAgentsPanel.js.map +1 -0
- package/dist/editor/control-center/WebSocketMessages.js +1 -0
- package/dist/editor/control-center/WebSocketMessages.js.map +1 -1
- package/dist/editor/control-center/setup-steps/AiSetupStep/tools/GenerateToolsSection.js +42 -7
- package/dist/editor/control-center/setup-steps/AiSetupStep/tools/GenerateToolsSection.js.map +1 -1
- package/dist/editor/media-selector/AiImageSearch.d.ts +1 -1
- package/dist/editor/media-selector/AiImageSearch.js +162 -103
- package/dist/editor/media-selector/AiImageSearch.js.map +1 -1
- package/dist/editor/media-selector/TreeSelector.js +20 -4
- package/dist/editor/media-selector/TreeSelector.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/UtilityControls.js +5 -2
- package/dist/editor/menubar/toolbar-sections/UtilityControls.js.map +1 -1
- package/dist/editor/page-editor-chrome/PlaceholderDropZone.d.ts +1 -1
- package/dist/editor/page-editor-chrome/PlaceholderDropZone.js +7 -5
- package/dist/editor/page-editor-chrome/PlaceholderDropZone.js.map +1 -1
- package/dist/editor/page-viewer/DeviceToolbar.js +2 -2
- package/dist/editor/page-viewer/DeviceToolbar.js.map +1 -1
- package/dist/editor/page-viewer/PageViewerFrame.js +18 -11
- package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
- package/dist/editor/services/agentService.d.ts +53 -48
- package/dist/editor/services/agentService.js +137 -79
- package/dist/editor/services/agentService.js.map +1 -1
- package/dist/editor/services/aiService.d.ts +1 -1
- package/dist/editor/services/editService.js +1 -0
- package/dist/editor/services/editService.js.map +1 -1
- package/dist/editor/sidebar/GraphQL.js +20 -7
- package/dist/editor/sidebar/GraphQL.js.map +1 -1
- package/dist/editor/sidebar/SEOInfo.js +1 -2
- package/dist/editor/sidebar/SEOInfo.js.map +1 -1
- package/dist/editor/sidebar/Translations.js +10 -7
- package/dist/editor/sidebar/Translations.js.map +1 -1
- package/dist/editor/ui/ItemNameDialogNew.js +1 -1
- package/dist/editor/ui/ItemSearch.js +10 -4
- package/dist/editor/ui/ItemSearch.js.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/page-wizard/steps/CollectStep.js +2 -2
- package/dist/page-wizard/steps/CollectStep.js.map +1 -1
- package/dist/page-wizard/steps/FieldEditor.js +2 -2
- package/dist/page-wizard/steps/FieldEditor.js.map +1 -1
- package/dist/revision.d.ts +2 -2
- package/dist/revision.js +2 -2
- package/dist/splash-screen/NewPage.js +2 -2
- package/dist/splash-screen/NewPage.js.map +1 -1
- package/dist/splash-screen/RecentPages.js +1 -1
- package/dist/splash-screen/RecentPages.js.map +1 -1
- package/dist/styles.css +167 -15
- package/dist/tour/Tour.js +15 -11
- package/dist/tour/Tour.js.map +1 -1
- package/package.json +1 -1
- package/src/components/index.ts +2 -0
- package/src/components/ui/select.tsx +3 -0
- package/src/components/ui/tabs.tsx +87 -0
- package/src/config/config.tsx +7 -1
- package/src/editor/FieldListField.tsx +13 -13
- package/src/editor/ImageEditButton.tsx +5 -3
- package/src/editor/PictureEditor.tsx +48 -1
- package/src/editor/Terminal.tsx +1 -1
- package/src/editor/Titlebar.tsx +0 -1
- package/src/editor/ai/AgentCostDisplay.tsx +57 -1
- package/src/editor/ai/AgentStatusBadge.tsx +144 -0
- package/src/editor/ai/AgentTerminal.tsx +345 -219
- package/src/editor/ai/Agents.tsx +179 -30
- package/src/editor/ai/AiResponseMessage.tsx +411 -114
- package/src/editor/ai/ContextInfoBar.tsx +134 -131
- package/src/editor/ai/ToolCallDisplay.tsx +217 -176
- package/src/editor/ai/useAgentStatus.ts +123 -0
- package/src/editor/client/EditorShell.tsx +34 -8
- package/src/editor/client/itemsRepository.ts +1 -2
- package/src/editor/commands/localizeItem/LocalizeItemDialog.tsx +5 -5
- package/src/editor/control-center/About.tsx +0 -14
- package/src/editor/control-center/AllAgentsPanel.tsx +300 -0
- package/src/editor/control-center/WebSocketMessages.tsx +1 -0
- package/src/editor/control-center/setup-steps/AiSetupStep/tools/GenerateToolsSection.tsx +49 -8
- package/src/editor/media-selector/AiImageSearch.tsx +162 -172
- package/src/editor/media-selector/TreeSelector.tsx +137 -116
- package/src/editor/menubar/toolbar-sections/UtilityControls.tsx +9 -1
- package/src/editor/page-editor-chrome/PlaceholderDropZone.tsx +7 -4
- package/src/editor/page-viewer/DeviceToolbar.tsx +15 -11
- package/src/editor/page-viewer/PageViewerFrame.tsx +20 -14
- package/src/editor/services/agentService.ts +217 -129
- package/src/editor/services/aiService.ts +2 -2
- package/src/editor/services/editService.ts +1 -0
- package/src/editor/sidebar/GraphQL.tsx +143 -117
- package/src/editor/sidebar/SEOInfo.tsx +1 -2
- package/src/editor/sidebar/Translations.tsx +14 -12
- package/src/editor/ui/ItemNameDialogNew.tsx +1 -1
- package/src/editor/ui/ItemSearch.tsx +11 -4
- package/src/editor/ui/SimpleTabs.tsx +1 -1
- package/src/index.ts +6 -0
- package/src/page-wizard/steps/CollectStep.tsx +2 -2
- package/src/page-wizard/steps/FieldEditor.tsx +13 -15
- package/src/revision.ts +2 -2
- package/src/splash-screen/NewPage.tsx +2 -2
- package/src/splash-screen/RecentPages.tsx +1 -1
- package/src/tour/Tour.tsx +61 -48
|
@@ -14,7 +14,7 @@ import { getComponentById } from "../componentTreeHelper";
|
|
|
14
14
|
import {
|
|
15
15
|
AgentDetails,
|
|
16
16
|
AgentMetadata,
|
|
17
|
-
|
|
17
|
+
updateAgentContext,
|
|
18
18
|
} from "../services/agentService";
|
|
19
19
|
import { ItemDescriptor } from "../pageModel";
|
|
20
20
|
|
|
@@ -42,42 +42,29 @@ export function ContextInfoBar({
|
|
|
42
42
|
|
|
43
43
|
const removeContextKey = useCallback(
|
|
44
44
|
async (
|
|
45
|
-
key: "pages" | "componentIds" | "field" | "comment",
|
|
45
|
+
key: "pages" | "componentIds" | "components" | "field" | "comment",
|
|
46
46
|
index?: number,
|
|
47
47
|
) => {
|
|
48
48
|
if (!agent?.id) return;
|
|
49
49
|
const current = agentMetadata || {};
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
...
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
if (ctx.pages.length === 0) delete ctx.pages;
|
|
69
|
-
} else if (
|
|
70
|
-
key === "componentIds" &&
|
|
71
|
-
typeof index === "number" &&
|
|
72
|
-
ctx.componentIds
|
|
73
|
-
) {
|
|
74
|
-
ctx.componentIds.splice(index, 1);
|
|
75
|
-
if (ctx.componentIds.length === 0) delete ctx.componentIds;
|
|
76
|
-
} else if (key === "field") {
|
|
77
|
-
delete ctx.field;
|
|
78
|
-
} else if (key === "comment") {
|
|
79
|
-
delete ctx.comment;
|
|
80
|
-
}
|
|
50
|
+
const next: AgentMetadata = { ...current };
|
|
51
|
+
|
|
52
|
+
if (key === "pages" && typeof index === "number" && next.pages) {
|
|
53
|
+
next.pages = [...next.pages];
|
|
54
|
+
next.pages.splice(index, 1);
|
|
55
|
+
if (next.pages.length === 0) delete next.pages;
|
|
56
|
+
} else if (
|
|
57
|
+
(key === "componentIds" || key === "components") &&
|
|
58
|
+
typeof index === "number" &&
|
|
59
|
+
next.components
|
|
60
|
+
) {
|
|
61
|
+
next.components = [...next.components];
|
|
62
|
+
next.components.splice(index, 1);
|
|
63
|
+
if (next.components.length === 0) delete next.components;
|
|
64
|
+
} else if (key === "field") {
|
|
65
|
+
delete next.field;
|
|
66
|
+
} else if (key === "comment") {
|
|
67
|
+
delete next.comment;
|
|
81
68
|
}
|
|
82
69
|
|
|
83
70
|
try {
|
|
@@ -85,13 +72,13 @@ export function ContextInfoBar({
|
|
|
85
72
|
setAgentMetadata(next);
|
|
86
73
|
return;
|
|
87
74
|
}
|
|
88
|
-
await
|
|
75
|
+
await updateAgentContext(agent.id, next);
|
|
89
76
|
setAgentMetadata(next);
|
|
90
77
|
setAgent((prev) =>
|
|
91
|
-
prev ? { ...prev,
|
|
78
|
+
prev ? { ...prev, agentContext: JSON.stringify(next) } : prev,
|
|
92
79
|
);
|
|
93
80
|
} catch (e) {
|
|
94
|
-
console.error("Failed to update agent
|
|
81
|
+
console.error("Failed to update agent context", e);
|
|
95
82
|
}
|
|
96
83
|
},
|
|
97
84
|
[agent?.id, agent?.status, agentMetadata, setAgent, setAgentMetadata],
|
|
@@ -106,12 +93,11 @@ export function ContextInfoBar({
|
|
|
106
93
|
language: item.language,
|
|
107
94
|
version: item.version,
|
|
108
95
|
name: editContext.contentEditorItem?.name,
|
|
109
|
-
path:
|
|
96
|
+
path: undefined,
|
|
110
97
|
};
|
|
111
98
|
|
|
112
99
|
const current = agentMetadata || {};
|
|
113
|
-
const currentPages =
|
|
114
|
-
((current.additionalData as any)?.context?.pages as Array<any>) || [];
|
|
100
|
+
const currentPages = current.pages || [];
|
|
115
101
|
|
|
116
102
|
const existingPageIds = new Set(
|
|
117
103
|
currentPages.map((p: any) => `${p.id}-${p.language}-${p.version}`),
|
|
@@ -125,33 +111,23 @@ export function ContextInfoBar({
|
|
|
125
111
|
return;
|
|
126
112
|
}
|
|
127
113
|
|
|
128
|
-
// Exclude top-level context to avoid duplicate keys when spreading
|
|
129
|
-
const { context: _, ...currentWithoutContext } = current;
|
|
130
114
|
const next: AgentMetadata = {
|
|
131
|
-
...
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
context: {
|
|
135
|
-
...((current.additionalData &&
|
|
136
|
-
(current.additionalData as any).context) ||
|
|
137
|
-
{}),
|
|
138
|
-
pages: [...currentPages, pageToAdd],
|
|
139
|
-
},
|
|
140
|
-
},
|
|
141
|
-
} as AgentMetadata;
|
|
115
|
+
...current,
|
|
116
|
+
pages: [...currentPages, pageToAdd],
|
|
117
|
+
};
|
|
142
118
|
|
|
143
119
|
try {
|
|
144
120
|
if (agent.status === "new") {
|
|
145
121
|
setAgentMetadata(next);
|
|
146
122
|
return;
|
|
147
123
|
}
|
|
148
|
-
await
|
|
124
|
+
await updateAgentContext(agent.id, next);
|
|
149
125
|
setAgentMetadata(next);
|
|
150
126
|
setAgent((prev) =>
|
|
151
|
-
prev ? { ...prev,
|
|
127
|
+
prev ? { ...prev, agentContext: JSON.stringify(next) } : prev,
|
|
152
128
|
);
|
|
153
129
|
} catch (e) {
|
|
154
|
-
console.error("Failed to update agent
|
|
130
|
+
console.error("Failed to update agent context (add pages)", e);
|
|
155
131
|
}
|
|
156
132
|
};
|
|
157
133
|
|
|
@@ -159,44 +135,47 @@ export function ContextInfoBar({
|
|
|
159
135
|
if (!agent?.id || !editContext?.selection?.length) return;
|
|
160
136
|
|
|
161
137
|
const current = agentMetadata || {};
|
|
162
|
-
const
|
|
163
|
-
((current.additionalData as any)?.context?.componentIds as string[]) ||
|
|
164
|
-
[];
|
|
138
|
+
const currentComponents = current.components || [];
|
|
165
139
|
|
|
166
|
-
const existingIds = new Set(
|
|
140
|
+
const existingIds = new Set(currentComponents.map(c => c.componentId));
|
|
167
141
|
const newComponentIds = editContext.selection.filter(
|
|
168
142
|
(id) => !existingIds.has(id),
|
|
169
143
|
);
|
|
170
144
|
|
|
171
145
|
if (newComponentIds.length === 0) return;
|
|
172
146
|
|
|
173
|
-
//
|
|
174
|
-
const
|
|
147
|
+
// Get page item descriptor from edit context
|
|
148
|
+
const pageItem = editContext.currentItemDescriptor ? {
|
|
149
|
+
id: editContext.currentItemDescriptor.id,
|
|
150
|
+
language: editContext.currentItemDescriptor.language,
|
|
151
|
+
version: editContext.currentItemDescriptor.version,
|
|
152
|
+
name: editContext.contentEditorItem?.name,
|
|
153
|
+
path: undefined,
|
|
154
|
+
} : undefined;
|
|
155
|
+
|
|
156
|
+
// Build new components with page info
|
|
157
|
+
const newComponents = newComponentIds.map(componentId => ({
|
|
158
|
+
componentId,
|
|
159
|
+
pageItem: pageItem!,
|
|
160
|
+
}));
|
|
161
|
+
|
|
175
162
|
const next: AgentMetadata = {
|
|
176
|
-
...
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
context: {
|
|
180
|
-
...((current.additionalData &&
|
|
181
|
-
(current.additionalData as any).context) ||
|
|
182
|
-
{}),
|
|
183
|
-
componentIds: [...currentComponentIds, ...newComponentIds],
|
|
184
|
-
},
|
|
185
|
-
},
|
|
186
|
-
} as AgentMetadata;
|
|
163
|
+
...current,
|
|
164
|
+
components: [...currentComponents, ...newComponents],
|
|
165
|
+
};
|
|
187
166
|
|
|
188
167
|
try {
|
|
189
168
|
if (agent.status === "new") {
|
|
190
169
|
setAgentMetadata(next);
|
|
191
170
|
return;
|
|
192
171
|
}
|
|
193
|
-
await
|
|
172
|
+
await updateAgentContext(agent.id, next);
|
|
194
173
|
setAgentMetadata(next);
|
|
195
174
|
setAgent((prev) =>
|
|
196
|
-
prev ? { ...prev,
|
|
175
|
+
prev ? { ...prev, agentContext: JSON.stringify(next) } : prev,
|
|
197
176
|
);
|
|
198
177
|
} catch (e) {
|
|
199
|
-
console.error("Failed to update agent
|
|
178
|
+
console.error("Failed to update agent context (add components)", e);
|
|
200
179
|
}
|
|
201
180
|
};
|
|
202
181
|
|
|
@@ -204,41 +183,44 @@ export function ContextInfoBar({
|
|
|
204
183
|
if (!agent?.id || !ids?.length) return;
|
|
205
184
|
|
|
206
185
|
const current = agentMetadata || {};
|
|
207
|
-
const
|
|
208
|
-
((current.additionalData as any)?.context?.componentIds as string[]) ||
|
|
209
|
-
[];
|
|
186
|
+
const currentComponents = current.components || [];
|
|
210
187
|
|
|
211
|
-
const existingIds = new Set(
|
|
188
|
+
const existingIds = new Set(currentComponents.map(c => c.componentId));
|
|
212
189
|
const newComponentIds = ids.filter((id) => !!id && !existingIds.has(id));
|
|
213
190
|
if (newComponentIds.length === 0) return;
|
|
214
191
|
|
|
215
|
-
//
|
|
216
|
-
const
|
|
192
|
+
// Get page item descriptor from edit context
|
|
193
|
+
const pageItem = editContext?.currentItemDescriptor ? {
|
|
194
|
+
id: editContext.currentItemDescriptor.id,
|
|
195
|
+
language: editContext.currentItemDescriptor.language,
|
|
196
|
+
version: editContext.currentItemDescriptor.version,
|
|
197
|
+
name: editContext.contentEditorItem?.name,
|
|
198
|
+
path: undefined,
|
|
199
|
+
} : undefined;
|
|
200
|
+
|
|
201
|
+
// Build new components with page info
|
|
202
|
+
const newComponents = newComponentIds.map(componentId => ({
|
|
203
|
+
componentId,
|
|
204
|
+
pageItem: pageItem!,
|
|
205
|
+
}));
|
|
206
|
+
|
|
217
207
|
const next: AgentMetadata = {
|
|
218
|
-
...
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
context: {
|
|
222
|
-
...((current.additionalData &&
|
|
223
|
-
(current.additionalData as any).context) ||
|
|
224
|
-
{}),
|
|
225
|
-
componentIds: [...currentComponentIds, ...newComponentIds],
|
|
226
|
-
},
|
|
227
|
-
},
|
|
228
|
-
} as AgentMetadata;
|
|
208
|
+
...current,
|
|
209
|
+
components: [...currentComponents, ...newComponents],
|
|
210
|
+
};
|
|
229
211
|
|
|
230
212
|
try {
|
|
231
213
|
if (agent.status === "new") {
|
|
232
214
|
setAgentMetadata(next);
|
|
233
215
|
return;
|
|
234
216
|
}
|
|
235
|
-
await
|
|
217
|
+
await updateAgentContext(agent.id, next);
|
|
236
218
|
setAgentMetadata(next);
|
|
237
219
|
setAgent((prev) =>
|
|
238
|
-
prev ? { ...prev,
|
|
220
|
+
prev ? { ...prev, agentContext: JSON.stringify(next) } : prev,
|
|
239
221
|
);
|
|
240
222
|
} catch (e) {
|
|
241
|
-
console.error("Failed to update agent
|
|
223
|
+
console.error("Failed to update agent context (add components)", e);
|
|
242
224
|
}
|
|
243
225
|
};
|
|
244
226
|
|
|
@@ -246,8 +228,7 @@ export function ContextInfoBar({
|
|
|
246
228
|
if (!agent?.id || !items?.length) return;
|
|
247
229
|
|
|
248
230
|
const current = agentMetadata || {};
|
|
249
|
-
const currentPages =
|
|
250
|
-
((current.additionalData as any)?.context?.pages as Array<any>) || [];
|
|
231
|
+
const currentPages = current.pages || [];
|
|
251
232
|
|
|
252
233
|
const existingPageIds = new Set(
|
|
253
234
|
currentPages.map((p: any) => `${p.id}-${p.language}-${p.version}`),
|
|
@@ -279,33 +260,23 @@ export function ContextInfoBar({
|
|
|
279
260
|
|
|
280
261
|
if (pagesToAdd.length === 0) return;
|
|
281
262
|
|
|
282
|
-
// Exclude top-level context to avoid duplicate keys when spreading
|
|
283
|
-
const { context: _, ...currentWithoutContext } = current;
|
|
284
263
|
const next: AgentMetadata = {
|
|
285
|
-
...
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
context: {
|
|
289
|
-
...((current.additionalData &&
|
|
290
|
-
(current.additionalData as any).context) ||
|
|
291
|
-
{}),
|
|
292
|
-
pages: [...currentPages, ...pagesToAdd],
|
|
293
|
-
},
|
|
294
|
-
},
|
|
295
|
-
} as AgentMetadata;
|
|
264
|
+
...current,
|
|
265
|
+
pages: [...currentPages, ...pagesToAdd],
|
|
266
|
+
};
|
|
296
267
|
|
|
297
268
|
try {
|
|
298
269
|
if (agent.status === "new") {
|
|
299
270
|
setAgentMetadata(next);
|
|
300
271
|
return;
|
|
301
272
|
}
|
|
302
|
-
await
|
|
273
|
+
await updateAgentContext(agent.id, next);
|
|
303
274
|
setAgentMetadata(next);
|
|
304
275
|
setAgent((prev) =>
|
|
305
|
-
prev ? { ...prev,
|
|
276
|
+
prev ? { ...prev, agentContext: JSON.stringify(next) } : prev,
|
|
306
277
|
);
|
|
307
278
|
} catch (e) {
|
|
308
|
-
console.error("Failed to update agent
|
|
279
|
+
console.error("Failed to update agent context (add items/pages)", e);
|
|
309
280
|
}
|
|
310
281
|
};
|
|
311
282
|
|
|
@@ -377,22 +348,10 @@ export function ContextInfoBar({
|
|
|
377
348
|
}
|
|
378
349
|
};
|
|
379
350
|
|
|
380
|
-
const ctx =
|
|
381
|
-
| {
|
|
382
|
-
pages?: Array<{
|
|
383
|
-
id: string;
|
|
384
|
-
language: string;
|
|
385
|
-
version: number;
|
|
386
|
-
path?: string;
|
|
387
|
-
name?: string;
|
|
388
|
-
}>;
|
|
389
|
-
componentIds?: string[];
|
|
390
|
-
field?: { fieldId: string; itemId: string; name?: string };
|
|
391
|
-
}
|
|
392
|
-
| undefined;
|
|
351
|
+
const ctx = agentMetadata;
|
|
393
352
|
|
|
394
353
|
const hasContext =
|
|
395
|
-
ctx && (ctx.pages?.length || ctx.componentIds?.length || ctx.field);
|
|
354
|
+
ctx && (ctx.pages?.length || ctx.components?.length || ctx.componentIds?.length || ctx.field);
|
|
396
355
|
|
|
397
356
|
const currentPageAlreadyAdded =
|
|
398
357
|
editContext?.currentItemDescriptor &&
|
|
@@ -406,6 +365,7 @@ export function ContextInfoBar({
|
|
|
406
365
|
const selectedComponentsAlreadyAdded =
|
|
407
366
|
!!editContext?.selection?.length &&
|
|
408
367
|
!!editContext.selection?.every((selectedId) =>
|
|
368
|
+
ctx?.components?.some(c => c.componentId === selectedId) ||
|
|
409
369
|
ctx?.componentIds?.includes(selectedId),
|
|
410
370
|
);
|
|
411
371
|
|
|
@@ -447,7 +407,7 @@ export function ContextInfoBar({
|
|
|
447
407
|
const pageLabelName =
|
|
448
408
|
page.name ||
|
|
449
409
|
resolvedPageName ||
|
|
450
|
-
|
|
410
|
+
undefined;
|
|
451
411
|
const pageLabel = `${pageLabelName || page.path || page.id} (${page.language}/${page.version})`;
|
|
452
412
|
chips.push(
|
|
453
413
|
<Chip
|
|
@@ -460,7 +420,35 @@ export function ContextInfoBar({
|
|
|
460
420
|
});
|
|
461
421
|
}
|
|
462
422
|
|
|
463
|
-
if (ctx?.
|
|
423
|
+
if (ctx?.components && ctx.components.length > 0) {
|
|
424
|
+
ctx.components.forEach((component, index) => {
|
|
425
|
+
const componentId = component.componentId;
|
|
426
|
+
let compLabel: string = componentId;
|
|
427
|
+
if (index === 0 && resolvedComponentName) {
|
|
428
|
+
compLabel = resolvedComponentName as string;
|
|
429
|
+
} else if (editContext?.page) {
|
|
430
|
+
try {
|
|
431
|
+
const comp = getComponentById(componentId, editContext.page);
|
|
432
|
+
compLabel = (comp?.name as string) || componentId;
|
|
433
|
+
} catch {}
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
// Include page info in the label
|
|
437
|
+
const pageInfo = component.pageItem
|
|
438
|
+
? ` on ${component.pageItem.name || component.pageItem.path || component.pageItem.id}`
|
|
439
|
+
: '';
|
|
440
|
+
|
|
441
|
+
chips.push(
|
|
442
|
+
<Chip
|
|
443
|
+
key={`component-${index}`}
|
|
444
|
+
icon={<Puzzle className="h-3 w-3 text-gray-500" strokeWidth={1} />}
|
|
445
|
+
label={`Component: ${compLabel}${pageInfo}`}
|
|
446
|
+
onRemove={() => removeContextKey("components", index)}
|
|
447
|
+
/>,
|
|
448
|
+
);
|
|
449
|
+
});
|
|
450
|
+
} else if (ctx?.componentIds && ctx.componentIds.length > 0) {
|
|
451
|
+
// Legacy support for componentIds without page info
|
|
464
452
|
ctx.componentIds.forEach((componentId, index) => {
|
|
465
453
|
let compLabel: string = componentId as string;
|
|
466
454
|
if (index === 0 && resolvedComponentName) {
|
|
@@ -504,12 +492,27 @@ export function ContextInfoBar({
|
|
|
504
492
|
const pageLabelName =
|
|
505
493
|
first.name ||
|
|
506
494
|
resolvedPageName ||
|
|
507
|
-
|
|
495
|
+
undefined;
|
|
508
496
|
const pageText = pageLabelName || first.path || first.id;
|
|
509
497
|
const more = ctx.pages.length > 1 ? ` (+${ctx.pages.length - 1})` : "";
|
|
510
498
|
summaryParts.push(`Item: ${pageText}${more}`);
|
|
511
499
|
}
|
|
512
|
-
if (ctx?.
|
|
500
|
+
if (ctx?.components && ctx.components.length > 0) {
|
|
501
|
+
const firstComponent = ctx.components[0]!;
|
|
502
|
+
const firstId = firstComponent.componentId;
|
|
503
|
+
let compLabel: string = firstId;
|
|
504
|
+
if (resolvedComponentName) compLabel = resolvedComponentName as string;
|
|
505
|
+
else if (editContext?.page) {
|
|
506
|
+
try {
|
|
507
|
+
const comp = getComponentById(firstId, editContext.page);
|
|
508
|
+
compLabel = (comp?.name as string) || firstId;
|
|
509
|
+
} catch {}
|
|
510
|
+
}
|
|
511
|
+
const more =
|
|
512
|
+
ctx.components.length > 1 ? ` (+${ctx.components.length - 1})` : "";
|
|
513
|
+
summaryParts.push(`Component: ${compLabel}${more}`);
|
|
514
|
+
} else if (ctx?.componentIds && ctx.componentIds.length > 0) {
|
|
515
|
+
// Legacy support for componentIds
|
|
513
516
|
const firstId = ctx.componentIds[0]!;
|
|
514
517
|
let compLabel: string = firstId as string;
|
|
515
518
|
if (resolvedComponentName) compLabel = resolvedComponentName as string;
|