@parhelia/core 0.1.12425 → 0.1.12436

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 (91) hide show
  1. package/dist/config/config.js +9 -2
  2. package/dist/config/config.js.map +1 -1
  3. package/dist/editor/PictureCropper.js +45 -41
  4. package/dist/editor/PictureCropper.js.map +1 -1
  5. package/dist/editor/ai/AgentTerminal.js +32 -5
  6. package/dist/editor/ai/AgentTerminal.js.map +1 -1
  7. package/dist/editor/ai/AgentTerminalStatusBar.js +65 -0
  8. package/dist/editor/ai/AgentTerminalStatusBar.js.map +1 -1
  9. package/dist/editor/ai/Agents.js +19 -0
  10. package/dist/editor/ai/Agents.js.map +1 -1
  11. package/dist/editor/ai/ContentInspectorPopover.d.ts +1 -0
  12. package/dist/editor/ai/ContentInspectorPopover.js +22 -8
  13. package/dist/editor/ai/ContentInspectorPopover.js.map +1 -1
  14. package/dist/editor/ai/dialogs/AgentDialogHandler.js +32 -3
  15. package/dist/editor/ai/dialogs/AgentDialogHandler.js.map +1 -1
  16. package/dist/editor/ai/dialogs/QuestionnaireInline.js +55 -20
  17. package/dist/editor/ai/dialogs/QuestionnaireInline.js.map +1 -1
  18. package/dist/editor/ai/dialogs/agentDialogTypes.d.ts +7 -4
  19. package/dist/editor/ai/dialogs/agentDialogTypes.js.map +1 -1
  20. package/dist/editor/services/agentService.d.ts +27 -0
  21. package/dist/editor/services/agentService.js +11 -2
  22. package/dist/editor/services/agentService.js.map +1 -1
  23. package/dist/editor/services/aiService.js +54 -3
  24. package/dist/editor/services/aiService.js.map +1 -1
  25. package/dist/editor/settings/About.js +40 -4
  26. package/dist/editor/settings/About.js.map +1 -1
  27. package/dist/editor/settings/panels/PersistentLogsPanel.d.ts +2 -0
  28. package/dist/editor/settings/panels/PersistentLogsPanel.js +221 -0
  29. package/dist/editor/settings/panels/PersistentLogsPanel.js.map +1 -0
  30. package/dist/editor/settings/panels/ProjectTemplatesPanel.js +24 -2
  31. package/dist/editor/settings/panels/ProjectTemplatesPanel.js.map +1 -1
  32. package/dist/editor/settings/panels/index.d.ts +1 -0
  33. package/dist/editor/settings/panels/index.js +1 -0
  34. package/dist/editor/settings/panels/index.js.map +1 -1
  35. package/dist/editor/ui/Splitter.d.ts +1 -0
  36. package/dist/editor/ui/Splitter.js +7 -1
  37. package/dist/editor/ui/Splitter.js.map +1 -1
  38. package/dist/licensing/LicenseContext.js +40 -4
  39. package/dist/licensing/LicenseContext.js.map +1 -1
  40. package/dist/licensing/LicenseOverlay.js +1 -1
  41. package/dist/licensing/LicenseOverlay.js.map +1 -1
  42. package/dist/licensing/types.d.ts +3 -1
  43. package/dist/licensing/types.js.map +1 -1
  44. package/dist/revision.d.ts +2 -2
  45. package/dist/revision.js +2 -2
  46. package/dist/task-board/TaskBoardWorkspace.js +18 -282
  47. package/dist/task-board/TaskBoardWorkspace.js.map +1 -1
  48. package/dist/task-board/components/ProjectDashboard.js +2 -1
  49. package/dist/task-board/components/ProjectDashboard.js.map +1 -1
  50. package/dist/task-board/components/ProjectSettingsDialog.d.ts +1 -0
  51. package/dist/task-board/components/ProjectSettingsDialog.js +112 -4
  52. package/dist/task-board/components/ProjectSettingsDialog.js.map +1 -1
  53. package/dist/task-board/components/TaskAgentPanel.d.ts +1 -0
  54. package/dist/task-board/components/TaskAgentPanel.js +2 -2
  55. package/dist/task-board/components/TaskAgentPanel.js.map +1 -1
  56. package/dist/task-board/components/TaskAssigneePicker.js +2 -2
  57. package/dist/task-board/components/TaskAssigneePicker.js.map +1 -1
  58. package/dist/task-board/components/TaskBoardMyTasksSidebar.js +1 -1
  59. package/dist/task-board/components/TaskBoardMyTasksSidebar.js.map +1 -1
  60. package/dist/task-board/components/TaskDetailDialog.d.ts +1 -0
  61. package/dist/task-board/components/TaskDetailDialog.js +2 -2
  62. package/dist/task-board/components/TaskDetailDialog.js.map +1 -1
  63. package/dist/task-board/components/TaskDetailPanel.d.ts +1 -0
  64. package/dist/task-board/components/TaskDetailPanel.js +23 -8
  65. package/dist/task-board/components/TaskDetailPanel.js.map +1 -1
  66. package/dist/task-board/components/TaskboardPersistentLogPanel.d.ts +11 -0
  67. package/dist/task-board/components/TaskboardPersistentLogPanel.js +114 -0
  68. package/dist/task-board/components/TaskboardPersistentLogPanel.js.map +1 -0
  69. package/dist/task-board/components/WizardTaskDetailsPanel.js +2 -1
  70. package/dist/task-board/components/WizardTaskDetailsPanel.js.map +1 -1
  71. package/dist/task-board/persistentLogLabels.d.ts +38 -0
  72. package/dist/task-board/persistentLogLabels.js +189 -0
  73. package/dist/task-board/persistentLogLabels.js.map +1 -0
  74. package/dist/task-board/services/taskService.d.ts +17 -1
  75. package/dist/task-board/services/taskService.js +56 -0
  76. package/dist/task-board/services/taskService.js.map +1 -1
  77. package/dist/task-board/taskExecutionRecords.js +2 -0
  78. package/dist/task-board/taskExecutionRecords.js.map +1 -1
  79. package/dist/task-board/types.d.ts +71 -1
  80. package/dist/task-board/useTaskBoardAgentPanelState.d.ts +34 -0
  81. package/dist/task-board/useTaskBoardAgentPanelState.js +283 -0
  82. package/dist/task-board/useTaskBoardAgentPanelState.js.map +1 -0
  83. package/dist/task-board/views/DependencyGraphView.js +5 -0
  84. package/dist/task-board/views/DependencyGraphView.js.map +1 -1
  85. package/dist/task-board/views/KanbanView.js +8 -1
  86. package/dist/task-board/views/KanbanView.js.map +1 -1
  87. package/dist/task-board/views/ListView.js +1 -1
  88. package/dist/task-board/views/ListView.js.map +1 -1
  89. package/dist/task-board/views/WizardView.js +4 -0
  90. package/dist/task-board/views/WizardView.js.map +1 -1
  91. package/package.json +1 -1
@@ -0,0 +1,221 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useMemo, useState } from "react";
3
+ import { AlertCircle, Bug, ExternalLink, RefreshCw, Search, Trash2 } from "lucide-react";
4
+ import { toast } from "sonner";
5
+ import { Badge } from "../../../components/ui/badge";
6
+ import { Button } from "../../../components/ui/button";
7
+ import { Card } from "../../../components/ui/card";
8
+ import { Input } from "../../../components/ui/input";
9
+ import { Select } from "../../../components/ui/select";
10
+ import { cn } from "../../../lib/utils";
11
+ import { useEditContext } from "../../client/editContext";
12
+ import { getPersistentLogsAdmin, purgePersistentLogs, } from "../../../task-board/services/taskService";
13
+ import { formatPersistentLogEventType, formatPersistentLogStage, formatPersistentLogStatus, persistentLogContextPartTooltip, persistentLogCreatedAtTooltip, persistentLogDurationTooltip, persistentLogEventTypeTooltip, persistentLogSeqTooltip, persistentLogSourceTooltip, persistentLogStageTooltip, persistentLogStatusTooltip, persistentLogToolCallTooltip, PERSISTENT_LOG_FIELD_HINT, } from "../../../task-board/persistentLogLabels";
14
+ const DEFAULT_LIMIT = "200";
15
+ const SUCCESS_OPTIONS = [
16
+ { value: "", label: "All results" },
17
+ { value: "true", label: "Successful only" },
18
+ { value: "false", label: "Failed only" },
19
+ ];
20
+ function createDefaultDraft() {
21
+ return {
22
+ agentId: "",
23
+ projectId: "",
24
+ taskId: "",
25
+ runId: "",
26
+ eventType: "",
27
+ stage: "",
28
+ status: "",
29
+ source: "",
30
+ searchTerm: "",
31
+ success: "",
32
+ limit: DEFAULT_LIMIT,
33
+ };
34
+ }
35
+ function trimOrNull(value) {
36
+ const trimmed = value.trim();
37
+ return trimmed.length > 0 ? trimmed : null;
38
+ }
39
+ function toFilters(draft) {
40
+ const parsedLimit = Number.parseInt(draft.limit, 10);
41
+ return {
42
+ agentId: trimOrNull(draft.agentId),
43
+ projectId: trimOrNull(draft.projectId),
44
+ taskId: trimOrNull(draft.taskId),
45
+ runId: trimOrNull(draft.runId),
46
+ eventType: trimOrNull(draft.eventType),
47
+ stage: trimOrNull(draft.stage),
48
+ status: trimOrNull(draft.status),
49
+ source: trimOrNull(draft.source),
50
+ searchTerm: trimOrNull(draft.searchTerm),
51
+ success: draft.success === "true" ? true : draft.success === "false" ? false : null,
52
+ limit: Number.isFinite(parsedLimit) && parsedLimit > 0 ? parsedLimit : 200,
53
+ };
54
+ }
55
+ function formatDuration(durationMs) {
56
+ if (typeof durationMs !== "number" || !Number.isFinite(durationMs) || durationMs < 0) {
57
+ return null;
58
+ }
59
+ if (durationMs < 1000)
60
+ return `${durationMs}ms`;
61
+ return `${(durationMs / 1000).toFixed(durationMs >= 10000 ? 0 : 1)}s`;
62
+ }
63
+ function shortenGuid(value) {
64
+ if (!value)
65
+ return null;
66
+ return value.length > 8 ? value.slice(0, 8) : value;
67
+ }
68
+ function trimPreview(value, maxLength = 800) {
69
+ if (!value)
70
+ return null;
71
+ const trimmed = value.trim();
72
+ if (!trimmed)
73
+ return null;
74
+ return trimmed.length > maxLength ? `${trimmed.slice(0, maxLength)}...` : trimmed;
75
+ }
76
+ function buildContextLine(entry) {
77
+ const parts = [];
78
+ if (entry.agentId)
79
+ parts.push(`Agent ${shortenGuid(entry.agentId)}`);
80
+ if (entry.projectId)
81
+ parts.push(`Project ${shortenGuid(entry.projectId)}`);
82
+ if (entry.taskId)
83
+ parts.push(`Task ${shortenGuid(entry.taskId)}`);
84
+ if (entry.runId)
85
+ parts.push(`Run ${shortenGuid(entry.runId)}`);
86
+ if (entry.userId)
87
+ parts.push(entry.userId);
88
+ return parts;
89
+ }
90
+ function renderPreviewBlock(label, value) {
91
+ const preview = trimPreview(value);
92
+ if (!preview)
93
+ return null;
94
+ return (_jsxs("div", { className: "grid gap-1", children: [_jsx("div", { className: "text-[10px] font-semibold tracking-wider text-slate-500 uppercase", children: label }), _jsx("pre", { className: "overflow-x-auto rounded border border-slate-200 bg-slate-50 p-2 text-[11px] leading-tight whitespace-pre-wrap text-slate-700", children: preview })] }));
95
+ }
96
+ function LogRow({ entry }) {
97
+ const createdAt = useMemo(() => new Date(entry.createdAt), [entry.createdAt]);
98
+ const hasValidCreatedAt = !Number.isNaN(createdAt.getTime());
99
+ const contextParts = buildContextLine(entry);
100
+ const duration = formatDuration(entry.durationMs);
101
+ const tone = entry.success === false || entry.status?.toLowerCase() === "failed"
102
+ ? "destructive"
103
+ : entry.success === true
104
+ ? "default"
105
+ : "secondary";
106
+ const contextLine = contextParts.length > 0 ? contextParts.join(" · ") : "None";
107
+ const contextTitle = contextParts
108
+ .map((part) => `${persistentLogContextPartTooltip(part)}`)
109
+ .join("\n\n");
110
+ const hasPayloadBlocks = Boolean(trimPreview(entry.payloadPreview) ||
111
+ trimPreview(entry.resultPreview) ||
112
+ trimPreview(entry.metadataJson));
113
+ const hasExpandableDetails = hasPayloadBlocks ||
114
+ Boolean(entry.error) ||
115
+ typeof entry.seq === "number" ||
116
+ Boolean(duration) ||
117
+ Boolean(entry.toolCallId?.trim());
118
+ const summaryText = entry.summary?.trim() || "No summary";
119
+ return (_jsxs("tr", { className: "border-t border-slate-100 align-middle text-[11px] leading-snug text-slate-700", children: [_jsx("td", { className: "max-w-[200px] whitespace-nowrap px-3 py-1.5 text-slate-600", children: _jsx("div", { className: "cursor-help truncate font-mono", title: persistentLogCreatedAtTooltip({
120
+ hasValidDate: hasValidCreatedAt,
121
+ localDisplay: hasValidCreatedAt ? createdAt.toLocaleString() : entry.createdAt,
122
+ isoUtc: hasValidCreatedAt ? createdAt.toISOString() : undefined,
123
+ raw: entry.createdAt,
124
+ }), children: hasValidCreatedAt ? createdAt.toLocaleString() : entry.createdAt }) }), _jsx("td", { className: "max-w-[120px] px-3 py-1.5", children: _jsx(Badge, { variant: "outline", className: "h-6 max-w-full cursor-help px-2 text-[11px] font-normal leading-none", title: persistentLogEventTypeTooltip(entry.eventType), children: _jsx("span", { className: "truncate", children: formatPersistentLogEventType(entry.eventType) }) }) }), _jsx("td", { className: "max-w-[140px] px-3 py-1.5", children: _jsx(Badge, { variant: "outline", className: "h-6 max-w-full cursor-help px-2 text-[11px] font-normal leading-none", title: persistentLogStageTooltip(entry.stage), children: _jsx("span", { className: "truncate", children: formatPersistentLogStage(entry.stage) }) }) }), _jsx("td", { className: "max-w-[200px] min-w-0 px-3 py-1.5", children: _jsxs("div", { className: "flex min-w-0 max-w-full items-center gap-1.5", children: [entry.status ? (_jsx(Badge, { variant: tone, className: "h-6 max-w-28 shrink-0 cursor-help px-2 text-[11px] font-normal leading-none", title: persistentLogStatusTooltip(entry.status), children: _jsx("span", { className: "truncate", children: formatPersistentLogStatus(entry.status) }) })) : (_jsx("span", { className: "shrink-0 text-slate-400", children: "\u2014" })), entry.source ? (_jsx("span", { className: "min-w-0 cursor-help truncate text-slate-500", title: persistentLogSourceTooltip(entry.source), children: entry.source })) : null] }) }), _jsx("td", { className: "min-w-[200px] max-w-xl px-3 py-1.5", children: !hasExpandableDetails ? (_jsx("div", { className: "truncate text-slate-800", title: summaryText, children: summaryText })) : (_jsxs("details", { className: "group min-w-0", children: [_jsxs("summary", { className: "flex cursor-pointer list-none items-center gap-2 [&::-webkit-details-marker]:hidden", children: [_jsxs("span", { className: "min-w-0 flex-1 truncate text-left text-slate-800", title: entry.error
125
+ ? `${summaryText}\n\n${entry.error}`
126
+ : summaryText, children: [entry.error ? (_jsxs("span", { className: "text-red-600", "aria-hidden": true, children: ["\u26A0", " "] })) : null, summaryText] }), _jsx("span", { className: "shrink-0 text-slate-500 underline-offset-2 group-open:font-medium group-hover:underline", children: "Details" })] }), _jsxs("div", { className: "mt-2 grid gap-2 border-t border-slate-100 pt-2 text-[11px] leading-snug", children: [typeof entry.seq === "number" || duration || entry.toolCallId ? (_jsxs("div", { className: "flex flex-wrap gap-x-3 gap-y-1 text-slate-500", children: [typeof entry.seq === "number" ? (_jsxs("span", { className: "cursor-help", title: persistentLogSeqTooltip(entry.seq), children: ["Seq ", entry.seq] })) : null, duration ? (_jsx("span", { className: "cursor-help", title: persistentLogDurationTooltip(duration), children: duration })) : null, entry.toolCallId ? (_jsxs("span", { className: "cursor-help", title: persistentLogToolCallTooltip(entry.toolCallId), children: ["Tool ", entry.toolCallId] })) : null] })) : null, entry.error ? (_jsx("div", { className: "rounded border border-red-100 bg-red-50 px-2 py-1 text-red-700", children: entry.error })) : null, hasPayloadBlocks ? (_jsxs("div", { className: "grid gap-2", children: [renderPreviewBlock("Payload", entry.payloadPreview), renderPreviewBlock("Result", entry.resultPreview), renderPreviewBlock("Metadata", entry.metadataJson)] })) : null] })] })) }), _jsx("td", { className: "max-w-[220px] min-w-0 px-3 py-1.5 text-slate-600", children: _jsx("div", { className: "cursor-help truncate", title: contextTitle, children: contextLine }) })] }));
127
+ }
128
+ export function PersistentLogsPanel() {
129
+ const editContext = useEditContext();
130
+ const [draft, setDraft] = useState(createDefaultDraft);
131
+ const [filters, setFilters] = useState({
132
+ limit: 200,
133
+ });
134
+ const [logs, setLogs] = useState([]);
135
+ const [loggingEnabled, setLoggingEnabled] = useState(true);
136
+ const [isLoading, setIsLoading] = useState(false);
137
+ const [isPurging, setIsPurging] = useState(false);
138
+ const [error, setError] = useState(null);
139
+ const loadLogs = useCallback(async () => {
140
+ setIsLoading(true);
141
+ setError(null);
142
+ const result = await getPersistentLogsAdmin(filters);
143
+ if (result.type === "success") {
144
+ setLogs(result.data?.logs || []);
145
+ setLoggingEnabled(result.data?.loggingEnabled !== false);
146
+ setError(null);
147
+ }
148
+ else if (result.type === "unauthorized") {
149
+ setLogs([]);
150
+ setError("Administrator access is required to view agent and taskboard logs.");
151
+ }
152
+ else {
153
+ setLogs([]);
154
+ setError(result.summary || "Failed to load agent and taskboard logs.");
155
+ }
156
+ setIsLoading(false);
157
+ }, [filters]);
158
+ useEffect(() => {
159
+ void loadLogs();
160
+ }, [loadLogs]);
161
+ const handleDraftChange = useCallback((key, value) => {
162
+ setDraft((current) => ({ ...current, [key]: value }));
163
+ }, []);
164
+ const handleApplyFilters = useCallback((event) => {
165
+ event?.preventDefault();
166
+ setFilters(toFilters(draft));
167
+ }, [draft]);
168
+ const handleResetFilters = useCallback(() => {
169
+ const nextDraft = createDefaultDraft();
170
+ setDraft(nextDraft);
171
+ setFilters(toFilters(nextDraft));
172
+ }, []);
173
+ const handleOpenSettings = useCallback(async () => {
174
+ if (!editContext)
175
+ return;
176
+ try {
177
+ const item = await editContext.loadItem("/sitecore/system/Parhelia/Settings");
178
+ if (item) {
179
+ editContext.switchWorkspace("editor");
180
+ }
181
+ else {
182
+ toast.error("Failed to open the Parhelia settings item.");
183
+ }
184
+ }
185
+ catch (e) {
186
+ toast.error(e?.message || "Failed to open the Parhelia settings item.");
187
+ }
188
+ }, [editContext]);
189
+ const handlePurge = useCallback(async () => {
190
+ const runPurge = async () => {
191
+ setIsPurging(true);
192
+ const result = await purgePersistentLogs();
193
+ setIsPurging(false);
194
+ if (result.type === "success") {
195
+ toast.success("Agent and taskboard log table truncated.");
196
+ await loadLogs();
197
+ return;
198
+ }
199
+ toast.error(result.summary || "Failed to purge persistent logs.");
200
+ };
201
+ if (editContext?.confirm) {
202
+ editContext.confirm({
203
+ header: "Purge agent and taskboard logs",
204
+ message: "This will truncate the stored agent and taskboard log table.\n\nThis action cannot be undone.",
205
+ acceptLabel: "Purge",
206
+ showCancel: true,
207
+ accept: () => {
208
+ void runPurge();
209
+ },
210
+ });
211
+ return;
212
+ }
213
+ if (typeof window !== "undefined" &&
214
+ window.confirm("This will truncate the stored agent and taskboard log table. Continue?")) {
215
+ await runPurge();
216
+ }
217
+ }, [editContext, loadLogs]);
218
+ return (_jsx("div", { className: "h-full overflow-auto p-4", children: _jsxs("div", { className: "mx-auto grid gap-4", children: [_jsx("div", { className: "rounded-lg border border-neutral-200 bg-white p-4 md:p-6", children: _jsxs("form", { className: "grid gap-4", onSubmit: handleApplyFilters, children: [!loggingEnabled ? (_jsxs("div", { className: "rounded border border-amber-200 bg-amber-50 px-3 py-2 text-sm text-amber-900", children: ["Logging is currently disabled. Enable", " ", _jsx("strong", { children: "Enable Agent and Taskboard Logging" }), " ", "on the Parhelia settings item to capture new entries."] })) : null, _jsxs("div", { className: "grid gap-3 md:grid-cols-2 xl:grid-cols-4", children: [_jsx(Input, { value: draft.searchTerm, onChange: (event) => handleDraftChange("searchTerm", event.target.value), placeholder: "Search summary, payload, metadata" }), _jsx(Input, { value: draft.agentId, onChange: (event) => handleDraftChange("agentId", event.target.value), placeholder: "Agent ID" }), _jsx(Input, { value: draft.projectId, onChange: (event) => handleDraftChange("projectId", event.target.value), placeholder: "Project ID" }), _jsx(Input, { value: draft.taskId, onChange: (event) => handleDraftChange("taskId", event.target.value), placeholder: "Task ID" }), _jsx(Input, { value: draft.runId, onChange: (event) => handleDraftChange("runId", event.target.value), placeholder: "Run ID" }), _jsx(Input, { value: draft.eventType, onChange: (event) => handleDraftChange("eventType", event.target.value), placeholder: "Event type" }), _jsx(Input, { value: draft.stage, onChange: (event) => handleDraftChange("stage", event.target.value), placeholder: "Stage" }), _jsx(Input, { value: draft.status, onChange: (event) => handleDraftChange("status", event.target.value), placeholder: "Status" }), _jsx(Input, { value: draft.source, onChange: (event) => handleDraftChange("source", event.target.value), placeholder: "Source" }), _jsx(Select, { value: draft.success, onValueChange: (value) => handleDraftChange("success", value), options: SUCCESS_OPTIONS, placeholder: "All results" }), _jsx(Input, { value: draft.limit, onChange: (event) => handleDraftChange("limit", event.target.value), placeholder: "Limit", inputMode: "numeric" })] }), _jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsxs(Button, { type: "submit", size: "sm", children: [_jsx(Search, { className: "h-4 w-4" }), "Apply Filters"] }), _jsx(Button, { type: "button", variant: "outline", size: "sm", onClick: handleResetFilters, children: "Reset" }), _jsxs(Button, { type: "button", variant: "outline", size: "sm", onClick: () => void loadLogs(), disabled: isLoading, children: [_jsx(RefreshCw, { className: cn("h-4 w-4", isLoading ? "animate-spin" : "") }), "Refresh"] }), _jsxs(Button, { type: "button", variant: "outline", size: "sm", onClick: () => void handleOpenSettings(), children: [_jsx(ExternalLink, { className: "h-4 w-4" }), "Open Settings Item"] }), _jsxs(Button, { type: "button", variant: "destructive", size: "sm", onClick: () => void handlePurge(), disabled: isPurging, children: [_jsx(Trash2, { className: "h-4 w-4" }), isPurging ? "Purging..." : "Purge Log Table"] })] })] }) }), _jsxs(Card, { icon: _jsx(Bug, { strokeWidth: 1, className: "h-5 w-5" }), title: "Entries", description: "Latest stored agent and taskboard log rows after applying the current filters.", children: [error ? (_jsx("div", { className: "rounded border border-red-200 bg-red-50 p-3 text-sm text-red-700", children: error })) : isLoading && logs.length === 0 ? (_jsxs("div", { className: "py-10 text-center text-sm text-slate-500", children: [_jsx(RefreshCw, { className: "mx-auto mb-2 h-4 w-4 animate-spin" }), "Loading agent and taskboard logs..."] })) : logs.length === 0 ? (_jsx("div", { className: "rounded border border-dashed border-slate-200 px-4 py-10 text-center text-sm text-slate-500", children: "No log entries matched the current filters." })) : (_jsxs("div", { className: "grid gap-2", children: [_jsx("p", { className: "text-xs leading-snug text-slate-500", children: PERSISTENT_LOG_FIELD_HINT }), _jsx("div", { className: "overflow-x-auto rounded border border-slate-200", children: _jsxs("table", { className: "min-w-full border-collapse", children: [_jsx("thead", { className: "bg-slate-50", children: _jsxs("tr", { className: "text-left text-[11px] font-semibold tracking-wider text-slate-500 uppercase", children: [_jsx("th", { className: "px-3 py-2", children: "Time" }), _jsx("th", { className: "px-3 py-2", children: "Type" }), _jsx("th", { className: "px-3 py-2", children: "Step" }), _jsx("th", { className: "px-3 py-2", children: "State" }), _jsx("th", { className: "px-3 py-2", children: "Summary" }), _jsx("th", { className: "px-3 py-2", children: "Context" })] }) }), _jsx("tbody", { children: logs.map((entry) => (_jsx(LogRow, { entry: entry }, entry.logId))) })] }) })] })), !loggingEnabled ? (_jsxs("div", { className: "mt-3 flex items-center gap-2 text-xs text-slate-500", children: [_jsx(AlertCircle, { className: "h-4 w-4" }), "New entries will not be written until logging is enabled again."] })) : null] })] }) }));
219
+ }
220
+ export default PersistentLogsPanel;
221
+ //# sourceMappingURL=PersistentLogsPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PersistentLogsPanel.js","sourceRoot":"","sources":["../../../../src/editor/settings/panels/PersistentLogsPanel.tsx"],"names":[],"mappings":"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"}
@@ -74,7 +74,7 @@ function normalizeTaskTemplate(task) {
74
74
  parentTaskId: rawParentTaskId,
75
75
  };
76
76
  }
77
- if (assigneeType === "Human" || assigneeType === "Role") {
77
+ if (assigneeType === "user" || assigneeType === "Role") {
78
78
  return {
79
79
  ...task,
80
80
  disabled,
@@ -361,6 +361,8 @@ export function ProjectTemplatesPanel() {
361
361
  const draftTemplateRef = useRef(null);
362
362
  const selectedTemplateIdRef = useRef(selectedTemplateId);
363
363
  const selectedTaskIdRef = useRef(selectedTaskId);
364
+ const isDirtyRef = useRef(isDirty);
365
+ const savingRef = useRef(saving);
364
366
  const templateAgentLoadRunIdRef = useRef(0);
365
367
  const externalRefreshTimeoutRef = useRef(null);
366
368
  const pendingExternalRefreshRef = useRef(false);
@@ -886,6 +888,12 @@ export function ProjectTemplatesPanel() {
886
888
  useEffect(() => {
887
889
  selectedTaskIdRef.current = selectedTaskId;
888
890
  }, [selectedTaskId]);
891
+ useEffect(() => {
892
+ isDirtyRef.current = isDirty;
893
+ }, [isDirty]);
894
+ useEffect(() => {
895
+ savingRef.current = saving;
896
+ }, [saving]);
889
897
  const queueExternalTemplateRefresh = useCallback(() => {
890
898
  if (saving || isDirty) {
891
899
  pendingExternalRefreshRef.current = true;
@@ -897,9 +905,23 @@ export function ProjectTemplatesPanel() {
897
905
  }
898
906
  externalRefreshTimeoutRef.current = window.setTimeout(() => {
899
907
  externalRefreshTimeoutRef.current = null;
908
+ if (savingRef.current || isDirtyRef.current) {
909
+ pendingExternalRefreshRef.current = true;
910
+ return;
911
+ }
900
912
  void loadTemplatesRef.current(selectedTemplateIdRef.current);
901
913
  }, PROJECT_TEMPLATE_EXTERNAL_REFRESH_DEBOUNCE_MS);
902
914
  }, [isDirty, saving]);
915
+ useEffect(() => {
916
+ if (!saving && !isDirty) {
917
+ return;
918
+ }
919
+ if (externalRefreshTimeoutRef.current !== null) {
920
+ window.clearTimeout(externalRefreshTimeoutRef.current);
921
+ externalRefreshTimeoutRef.current = null;
922
+ pendingExternalRefreshRef.current = true;
923
+ }
924
+ }, [isDirty, saving]);
903
925
  useEffect(() => {
904
926
  if (!editContext?.itemsRepository) {
905
927
  return;
@@ -1508,7 +1530,7 @@ export function ProjectTemplatesPanel() {
1508
1530
  collapsible: true,
1509
1531
  },
1510
1532
  ];
1511
- return (_jsxs(_Fragment, { children: [_jsx("div", { className: "h-full", "data-testid": "project-template-editor", onKeyDownCapture: handleProjectTemplateEditorKeyDownCapture, children: _jsx(Splitter, { panels: panels, localStorageKey: "settings-project-templates-panel-splitter-v2", direction: "horizontal", className: "h-full" }) }), _jsx(Dialog, { open: isCreateTaskDialogOpen, onOpenChange: (open) => {
1533
+ return (_jsxs(_Fragment, { children: [_jsx("div", { className: "h-full", "data-testid": "project-template-editor", onKeyDownCapture: handleProjectTemplateEditorKeyDownCapture, children: _jsx(Splitter, { panels: panels, localStorageKey: "settings-project-templates-panel-splitter-v2", direction: "horizontal", className: "h-full", forceExpandLastPanelKey: editingAgentProfile?.id ?? null }) }), _jsx(Dialog, { open: isCreateTaskDialogOpen, onOpenChange: (open) => {
1512
1534
  setIsCreateTaskDialogOpen(open);
1513
1535
  if (!open) {
1514
1536
  setNewTaskDependencySourceId(null);