@parhelia/core 0.2.12783 → 0.2.12786

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 (114) hide show
  1. package/dist/editor/ai/AgentImageCopyButton.d.ts +6 -0
  2. package/dist/editor/ai/AgentImageCopyButton.js +93 -0
  3. package/dist/editor/ai/AgentImageCopyButton.js.map +1 -0
  4. package/dist/editor/ai/terminal/components/EditFieldToolCallContent.d.ts +24 -0
  5. package/dist/editor/ai/terminal/components/EditFieldToolCallContent.js +97 -0
  6. package/dist/editor/ai/terminal/components/EditFieldToolCallContent.js.map +1 -0
  7. package/dist/editor/ai/terminal/components/ValueDiff.d.ts +15 -0
  8. package/dist/editor/ai/terminal/components/ValueDiff.js +21 -0
  9. package/dist/editor/ai/terminal/components/ValueDiff.js.map +1 -0
  10. package/dist/editor/ai/terminal/components/agentThinkingStyles.d.ts +1 -0
  11. package/dist/editor/ai/terminal/components/agentThinkingStyles.js +2 -0
  12. package/dist/editor/ai/terminal/components/agentThinkingStyles.js.map +1 -0
  13. package/dist/editor/ai/terminal/components/toolCallContentRenderers.d.ts +15 -0
  14. package/dist/editor/ai/terminal/components/toolCallContentRenderers.js +12 -0
  15. package/dist/editor/ai/terminal/components/toolCallContentRenderers.js.map +1 -0
  16. package/dist/editor/client/hooks/activeSessionSnapshots.d.ts +2 -0
  17. package/dist/editor/client/hooks/activeSessionSnapshots.js +43 -0
  18. package/dist/editor/client/hooks/activeSessionSnapshots.js.map +1 -0
  19. package/dist/editor/client/hooks/operationRefreshDeduplication.d.ts +22 -0
  20. package/dist/editor/client/hooks/operationRefreshDeduplication.js +45 -0
  21. package/dist/editor/client/hooks/operationRefreshDeduplication.js.map +1 -0
  22. package/dist/editor/client/hooks/socketMessageRetention.d.ts +7 -0
  23. package/dist/editor/client/hooks/socketMessageRetention.js +11 -0
  24. package/dist/editor/client/hooks/socketMessageRetention.js.map +1 -0
  25. package/dist/editor/client/hooks/useClientInfoRegistration.d.ts +13 -0
  26. package/dist/editor/client/hooks/useClientInfoRegistration.js +38 -0
  27. package/dist/editor/client/hooks/useClientInfoRegistration.js.map +1 -0
  28. package/dist/editor/client/undoTargetResolution.d.ts +28 -0
  29. package/dist/editor/client/undoTargetResolution.js +69 -0
  30. package/dist/editor/client/undoTargetResolution.js.map +1 -0
  31. package/dist/editor/field-types/singleLineTextValue.d.ts +3 -0
  32. package/dist/editor/field-types/singleLineTextValue.js +9 -0
  33. package/dist/editor/field-types/singleLineTextValue.js.map +1 -0
  34. package/dist/editor/insertOptionCompatibility.d.ts +7 -0
  35. package/dist/editor/insertOptionCompatibility.js +15 -0
  36. package/dist/editor/insertOptionCompatibility.js.map +1 -0
  37. package/dist/editor/media-selector/mediaItemDrag.d.ts +28 -0
  38. package/dist/editor/media-selector/mediaItemDrag.js +42 -0
  39. package/dist/editor/media-selector/mediaItemDrag.js.map +1 -0
  40. package/dist/editor/menubar/toolbar-sections/PreviewModeControl.d.ts +1 -0
  41. package/dist/editor/menubar/toolbar-sections/PreviewModeControl.js +14 -0
  42. package/dist/editor/menubar/toolbar-sections/PreviewModeControl.js.map +1 -0
  43. package/dist/editor/menubar/toolbar-sections/RefreshPageControl.d.ts +7 -0
  44. package/dist/editor/menubar/toolbar-sections/RefreshPageControl.js +44 -0
  45. package/dist/editor/menubar/toolbar-sections/RefreshPageControl.js.map +1 -0
  46. package/dist/editor/page-editor-chrome/InlineFieldHistoryButton.d.ts +58 -0
  47. package/dist/editor/page-editor-chrome/InlineFieldHistoryButton.js +731 -0
  48. package/dist/editor/page-editor-chrome/InlineFieldHistoryButton.js.map +1 -0
  49. package/dist/editor/page-viewer/bridgeInlineAiSelection.d.ts +17 -0
  50. package/dist/editor/page-viewer/bridgeInlineAiSelection.js +80 -0
  51. package/dist/editor/page-viewer/bridgeInlineAiSelection.js.map +1 -0
  52. package/dist/editor/page-viewer/bridgeInlineEditCommit.d.ts +18 -0
  53. package/dist/editor/page-viewer/bridgeInlineEditCommit.js +24 -0
  54. package/dist/editor/page-viewer/bridgeInlineEditCommit.js.map +1 -0
  55. package/dist/editor/page-viewer/bridgeItemChangeTarget.d.ts +9 -0
  56. package/dist/editor/page-viewer/bridgeItemChangeTarget.js +38 -0
  57. package/dist/editor/page-viewer/bridgeItemChangeTarget.js.map +1 -0
  58. package/dist/editor/page-viewer/bridgePointerDragRelease.d.ts +31 -0
  59. package/dist/editor/page-viewer/bridgePointerDragRelease.js +32 -0
  60. package/dist/editor/page-viewer/bridgePointerDragRelease.js.map +1 -0
  61. package/dist/editor/page-viewer/fullscreenPagePath.d.ts +1 -0
  62. package/dist/editor/page-viewer/fullscreenPagePath.js +11 -0
  63. package/dist/editor/page-viewer/fullscreenPagePath.js.map +1 -0
  64. package/dist/editor/page-viewer/internalLinkNavigation.d.ts +9 -0
  65. package/dist/editor/page-viewer/internalLinkNavigation.js +104 -0
  66. package/dist/editor/page-viewer/internalLinkNavigation.js.map +1 -0
  67. package/dist/editor/reviews/FeedbackFilters.d.ts +16 -0
  68. package/dist/editor/reviews/FeedbackFilters.js +45 -0
  69. package/dist/editor/reviews/FeedbackFilters.js.map +1 -0
  70. package/dist/editor/reviews/commentState.d.ts +4 -0
  71. package/dist/editor/reviews/commentState.js +15 -0
  72. package/dist/editor/reviews/commentState.js.map +1 -0
  73. package/dist/editor/settings/index/IndexGenerationsSection.d.ts +8 -0
  74. package/dist/editor/settings/index/IndexGenerationsSection.js +93 -0
  75. package/dist/editor/settings/index/IndexGenerationsSection.js.map +1 -0
  76. package/dist/editor/settings/panels/MemoriesPanel.d.ts +16 -0
  77. package/dist/editor/settings/panels/MemoriesPanel.js +292 -0
  78. package/dist/editor/settings/panels/MemoriesPanel.js.map +1 -0
  79. package/dist/editor/settings/panels/MemoryEntryDialog.d.ts +45 -0
  80. package/dist/editor/settings/panels/MemoryEntryDialog.js +167 -0
  81. package/dist/editor/settings/panels/MemoryEntryDialog.js.map +1 -0
  82. package/dist/editor/settings/panels/RenderingHostsPanel.d.ts +2 -0
  83. package/dist/editor/settings/panels/RenderingHostsPanel.js +63 -0
  84. package/dist/editor/settings/panels/RenderingHostsPanel.js.map +1 -0
  85. package/dist/editor/settings/panels/projectTemplateDuplication.d.ts +5 -0
  86. package/dist/editor/settings/panels/projectTemplateDuplication.js +57 -0
  87. package/dist/editor/settings/panels/projectTemplateDuplication.js.map +1 -0
  88. package/dist/editor/sidebar/WorkboxFilters.d.ts +11 -0
  89. package/dist/editor/sidebar/WorkboxFilters.js +61 -0
  90. package/dist/editor/sidebar/WorkboxFilters.js.map +1 -0
  91. package/dist/editor/version-diff/versionDiffGeometryKeys.d.ts +10 -0
  92. package/dist/editor/version-diff/versionDiffGeometryKeys.js +16 -0
  93. package/dist/editor/version-diff/versionDiffGeometryKeys.js.map +1 -0
  94. package/dist/revision.d.ts +2 -2
  95. package/dist/revision.js +2 -2
  96. package/package.json +1 -1
  97. package/dist/editor/ai/terminal/components/AgentEditHistoryButton.d.ts +0 -5
  98. package/dist/editor/ai/terminal/components/AgentEditHistoryButton.js +0 -12
  99. package/dist/editor/ai/terminal/components/AgentEditHistoryButton.js.map +0 -1
  100. package/dist/editor/ai/terminal/components/AgentThinkingDots.d.ts +0 -5
  101. package/dist/editor/ai/terminal/components/AgentThinkingDots.js +0 -9
  102. package/dist/editor/ai/terminal/components/AgentThinkingDots.js.map +0 -1
  103. package/dist/editor/reviews/CommentsAndFeedback.d.ts +0 -8
  104. package/dist/editor/reviews/CommentsAndFeedback.js +0 -17
  105. package/dist/editor/reviews/CommentsAndFeedback.js.map +0 -1
  106. package/dist/editor/reviews/CreateReviewDetailsStep.d.ts +0 -53
  107. package/dist/editor/reviews/CreateReviewDetailsStep.js +0 -77
  108. package/dist/editor/reviews/CreateReviewDetailsStep.js.map +0 -1
  109. package/dist/splash-screen/ParheliaAssistantChat.d.ts +0 -8
  110. package/dist/splash-screen/ParheliaAssistantChat.js +0 -507
  111. package/dist/splash-screen/ParheliaAssistantChat.js.map +0 -1
  112. package/dist/splash-screen/SplashScreenAgentContext.d.ts +0 -28
  113. package/dist/splash-screen/SplashScreenAgentContext.js +0 -51
  114. package/dist/splash-screen/SplashScreenAgentContext.js.map +0 -1
@@ -0,0 +1,93 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useState } from "react";
3
+ import { Layers, RefreshCw } from "lucide-react";
4
+ import { SettingsCard as Card } from "../SettingsCard";
5
+ import { Button } from "../../../components/ui/button";
6
+ import { cn } from "../../../lib/utils";
7
+ import * as indexService from "../../services/indexService";
8
+ function statusLabel(generation) {
9
+ switch (generation.status) {
10
+ case "active":
11
+ return "Serving queries";
12
+ case "building":
13
+ return "Being built";
14
+ case "retired":
15
+ return "Retired";
16
+ default:
17
+ return generation.status;
18
+ }
19
+ }
20
+ function statusClass(status) {
21
+ if (status === "active")
22
+ return "text-feedback-green";
23
+ if (status === "building")
24
+ return "text-feedback-orange";
25
+ return "text-neutral-grey-50";
26
+ }
27
+ /**
28
+ * Shows the index generations and lets a completed one be promoted to serving queries.
29
+ *
30
+ * A rebuild collects into a new generation while the previous one keeps answering
31
+ * searches, so switching embedding models never leaves the index half-migrated. The
32
+ * activate button stays disabled until that generation's queue is fully drained.
33
+ */
34
+ export function IndexGenerationsSection() {
35
+ const [generations, setGenerations] = useState([]);
36
+ const [isLoading, setIsLoading] = useState(false);
37
+ const [isActivating, setIsActivating] = useState(false);
38
+ const [message, setMessage] = useState(null);
39
+ const [isError, setIsError] = useState(false);
40
+ const load = useCallback(async () => {
41
+ try {
42
+ setIsLoading(true);
43
+ setGenerations(await indexService.getGenerations());
44
+ }
45
+ catch (e) {
46
+ setIsError(true);
47
+ setMessage(e?.message || "Could not load index generations");
48
+ }
49
+ finally {
50
+ setIsLoading(false);
51
+ }
52
+ }, []);
53
+ useEffect(() => {
54
+ load();
55
+ }, [load]);
56
+ const handleActivate = useCallback(async (generationId) => {
57
+ try {
58
+ setIsActivating(true);
59
+ setMessage(null);
60
+ const result = await indexService.activateGeneration(generationId);
61
+ setIsError(!result.success);
62
+ setMessage(result.message);
63
+ await load();
64
+ }
65
+ catch (e) {
66
+ setIsError(true);
67
+ setMessage(e?.message || "Could not activate generation");
68
+ }
69
+ finally {
70
+ setIsActivating(false);
71
+ }
72
+ }, [load]);
73
+ // A single active generation and nothing else is the steady state; there is nothing
74
+ // to choose between, so the section stays out of the way.
75
+ if (generations.length <= 1 && !message) {
76
+ return null;
77
+ }
78
+ return (_jsx(Card, { icon: _jsx(Layers, { strokeWidth: 1, className: "h-5 w-5" }), title: "Index generations", description: "A rebuild builds a new generation while the current one keeps serving searches. Activate it once it has finished to switch over.", children: _jsxs("div", { className: "flex flex-col gap-2", "data-testid": "index-generations", children: [generations.map((generation) => {
79
+ const outstanding = generation.pendingRequests +
80
+ generation.processingRequests +
81
+ generation.failedRequests;
82
+ return (_jsxs("div", { className: "bg-neutral-grey-5 flex flex-wrap items-center gap-3 rounded p-2", "data-testid": `index-generation-${generation.generationId}`, children: [_jsxs("div", { className: "min-w-[120px] flex-1", children: [_jsxs("div", { className: "text-neutral-grey-50 text-xs", children: ["Generation ", generation.generationId] }), _jsx("div", { className: cn("text-xs font-medium", statusClass(generation.status)), children: statusLabel(generation) })] }), _jsxs("div", { className: "min-w-[140px] flex-1", children: [_jsx("div", { className: "text-neutral-grey-50 text-xs", children: "Model" }), _jsxs("div", { className: "text-neutral-grey-100 truncate text-xs font-medium", children: [generation.modelName || "Not recorded", generation.supportsImages ? " · images" : ""] })] }), _jsxs("div", { className: "min-w-[90px] flex-1", children: [_jsx("div", { className: "text-neutral-grey-50 text-xs", children: "Items" }), _jsx("div", { className: "text-neutral-grey-100 text-xs font-medium", children: generation.indexedItemCount.toLocaleString() })] }), _jsxs("div", { className: "min-w-[110px] flex-1", children: [_jsx("div", { className: "text-neutral-grey-50 text-xs", children: "Queue" }), _jsx("div", { className: cn("text-xs font-medium", generation.failedRequests > 0
83
+ ? "text-feedback-red"
84
+ : "text-neutral-grey-100"), children: outstanding === 0
85
+ ? "Drained"
86
+ : `${outstanding.toLocaleString()} left${generation.failedRequests > 0
87
+ ? ` (${generation.failedRequests.toLocaleString()} failed)`
88
+ : ""}` })] }), generation.status !== "active" && (_jsx(Button, { variant: "secondary", size: "sm", disabled: !generation.canActivate || isActivating, onClick: () => handleActivate(generation.generationId), "data-testid": `activate-generation-${generation.generationId}`, children: isActivating ? "Activating..." : "Activate" }))] }, generation.generationId));
89
+ }), message && (_jsx("div", { className: cn("rounded border p-2 text-xs", isError
90
+ ? "border-feedback-red bg-feedback-red-light text-feedback-red"
91
+ : "border-feedback-green bg-feedback-green-light text-feedback-green"), "data-testid": "index-generations-message", children: message })), _jsx("div", { children: _jsxs(Button, { variant: "ghost", size: "sm", onClick: load, disabled: isLoading, "data-testid": "refresh-generations", children: [_jsx(RefreshCw, { strokeWidth: 1, className: cn("h-3 w-3", isLoading && "animate-spin") }), "Refresh"] }) })] }) }));
92
+ }
93
+ //# sourceMappingURL=IndexGenerationsSection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IndexGenerationsSection.js","sourceRoot":"","sources":["../../../../src/editor/settings/index/IndexGenerationsSection.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import React from "react";
2
+ /**
3
+ * Management UI for agent memories.
4
+ *
5
+ * Two kinds live here because they share one store and one prompt pipeline:
6
+ * - Content memories, attached to a content item and inherited by everything below it. This
7
+ * is where tone of voice is authored.
8
+ * - The signed-in user's personal memories, grouped by agent profile.
9
+ *
10
+ * Sits in the AI settings group rather than Personal, because content memories are shared.
11
+ *
12
+ * All creation and editing goes through {@link MemoryEntryDialog}; this panel owns every
13
+ * entry list itself so counts and the left list stay consistent without cross-component
14
+ * syncing. (The chat tray's compact AgentMemoryPanel is intentionally not reused here.)
15
+ */
16
+ export declare function MemoriesPanel(): React.JSX.Element;
@@ -0,0 +1,292 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useMemo, useState } from "react";
3
+ import { Brain, Lock, Pencil, Plus, RefreshCw } from "lucide-react";
4
+ import { Button } from "../../../components/ui/button";
5
+ import { DeleteIcon } from "../../../components/ui/delete-icon";
6
+ import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from "../../../components/ui/alert-dialog";
7
+ import { SettingsPanelLayout } from "../SettingsPanelLayout";
8
+ import { SearchInput } from "../../../components/SearchInput";
9
+ import { cn } from "../../../lib/utils";
10
+ import { Splitter } from "../../ui/Splitter";
11
+ import { LoadingState } from "../../ui/LoadingState";
12
+ import { SimpleIconButton } from "../../ui/SimpleIconButton";
13
+ import { formatDateTime } from "../../utils";
14
+ import { useRequiredSettingsHeaderActions } from "../SettingsHeaderActionsContext";
15
+ import { loadAiProfiles } from "../../services/aiService";
16
+ import { deleteAgentMemory, getSubtreeMemories, listMyAgentMemories, listSubtreeMemoryScopes, memoryLanguageBadges, } from "../../services/agentService";
17
+ import { MemoryEntryDialog, } from "./MemoryEntryDialog";
18
+ /**
19
+ * Management UI for agent memories.
20
+ *
21
+ * Two kinds live here because they share one store and one prompt pipeline:
22
+ * - Content memories, attached to a content item and inherited by everything below it. This
23
+ * is where tone of voice is authored.
24
+ * - The signed-in user's personal memories, grouped by agent profile.
25
+ *
26
+ * Sits in the AI settings group rather than Personal, because content memories are shared.
27
+ *
28
+ * All creation and editing goes through {@link MemoryEntryDialog}; this panel owns every
29
+ * entry list itself so counts and the left list stay consistent without cross-component
30
+ * syncing. (The chat tray's compact AgentMemoryPanel is intentionally not reused here.)
31
+ */
32
+ export function MemoriesPanel() {
33
+ const [state, setState] = useState("loading");
34
+ const [error, setError] = useState(null);
35
+ const [scopes, setScopes] = useState([]);
36
+ const [personalMemories, setPersonalMemories] = useState([]);
37
+ const [profiles, setProfiles] = useState([]);
38
+ const [searchQuery, setSearchQuery] = useState("");
39
+ const [selection, setSelection] = useState(null);
40
+ const [dialogTarget, setDialogTarget] = useState(null);
41
+ const [pendingDelete, setPendingDelete] = useState(null);
42
+ const setSettingsHeaderActions = useRequiredSettingsHeaderActions();
43
+ // Entries of the selected scope. Owned here (not by the detail pane) so saves and
44
+ // deletes can update the list and the left column's counts in one place.
45
+ const [scopeEntries, setScopeEntries] = useState([]);
46
+ const [scopeCanWrite, setScopeCanWrite] = useState(false);
47
+ const [entriesState, setEntriesState] = useState("loading");
48
+ const [entriesError, setEntriesError] = useState(null);
49
+ const [entriesRefresh, setEntriesRefresh] = useState(0);
50
+ const load = useCallback(async () => {
51
+ try {
52
+ setState("loading");
53
+ const [scopeResult, personalResult, profileList] = await Promise.all([
54
+ listSubtreeMemoryScopes({ take: 200 }),
55
+ listMyAgentMemories(0, 200),
56
+ // Names for the personal grouping; a failure here must not blank the panel.
57
+ loadAiProfiles().catch(() => []),
58
+ ]);
59
+ if (!scopeResult.success) {
60
+ throw new Error(scopeResult.error || "Failed to load memory scopes");
61
+ }
62
+ const scopeList = scopeResult.scopes ?? [];
63
+ setScopes(scopeList);
64
+ setPersonalMemories(personalResult.memories ?? []);
65
+ setProfiles(profileList);
66
+ setError(null);
67
+ setState("success");
68
+ // Land the user on something real instead of an empty "select on the left" pane.
69
+ const firstScopeId = scopeList[0]?.scopeId;
70
+ setSelection((prev) => prev ??
71
+ (firstScopeId
72
+ ? { kind: "scope", scopeId: firstScopeId }
73
+ : { kind: "personal" }));
74
+ }
75
+ catch (err) {
76
+ console.error("Failed to load memories", err);
77
+ setError(err instanceof Error ? err.message : "Failed to load memories");
78
+ setState("error");
79
+ }
80
+ }, []);
81
+ useEffect(() => {
82
+ void load();
83
+ }, [load]);
84
+ const selectedScopeId = selection?.kind === "scope" ? selection.scopeId : null;
85
+ useEffect(() => {
86
+ if (!selectedScopeId)
87
+ return;
88
+ let cancelled = false;
89
+ setEntriesState("loading");
90
+ setEntriesError(null);
91
+ getSubtreeMemories({ scopeId: selectedScopeId, includeInherited: false })
92
+ .then((result) => {
93
+ if (cancelled)
94
+ return;
95
+ if (result.success) {
96
+ setScopeEntries(result.memories ?? []);
97
+ setScopeCanWrite(result.canWrite ?? false);
98
+ setEntriesState("success");
99
+ }
100
+ else {
101
+ setEntriesError(result.error || "Failed to load memories");
102
+ setEntriesState("error");
103
+ }
104
+ })
105
+ .catch((err) => {
106
+ if (cancelled)
107
+ return;
108
+ console.error("Failed to load content memories", err);
109
+ setEntriesError(err instanceof Error ? err.message : "Failed to load memories");
110
+ setEntriesState("error");
111
+ });
112
+ return () => {
113
+ cancelled = true;
114
+ };
115
+ }, [selectedScopeId, entriesRefresh]);
116
+ const filteredScopes = useMemo(() => {
117
+ const query = searchQuery.trim().toLowerCase();
118
+ if (!query)
119
+ return scopes;
120
+ return scopes.filter((scope) => scope.name?.toLowerCase().includes(query) ||
121
+ scope.path?.toLowerCase().includes(query));
122
+ }, [scopes, searchQuery]);
123
+ const addGuidanceButton = useMemo(() => (_jsxs(Button, { size: "sm", variant: "default", onClick: () => setDialogTarget({ kind: "guidance" }), disabled: state === "loading", "data-testid": "memories-panel-new-guidance", title: "Add content memory", children: [_jsx(Plus, { className: "mr-1 h-4 w-4", strokeWidth: 1 }), "New memory"] })), [state]);
124
+ // Surface the primary action in the settings header bar (desktop only; the toolbar below
125
+ // carries a mobile duplicate).
126
+ useEffect(() => {
127
+ if (!setSettingsHeaderActions)
128
+ return;
129
+ setSettingsHeaderActions(addGuidanceButton);
130
+ return () => {
131
+ setSettingsHeaderActions(null);
132
+ };
133
+ }, [addGuidanceButton, setSettingsHeaderActions]);
134
+ const setScopeCount = useCallback((scopeId, count) => {
135
+ setScopes((prev) => {
136
+ if (count === 0) {
137
+ // A scope only exists in this list because it carries memories.
138
+ return prev.filter((s) => s.scopeId !== scopeId);
139
+ }
140
+ return prev.map((s) => s.scopeId === scopeId ? { ...s, entryCount: count } : s);
141
+ });
142
+ if (count === 0 && selectedScopeId === scopeId) {
143
+ setSelection(null);
144
+ }
145
+ }, [selectedScopeId]);
146
+ const handleDialogSaved = useCallback(async (memory, scopeId) => {
147
+ if (!dialogTarget)
148
+ return;
149
+ if (dialogTarget.kind === "personal") {
150
+ setPersonalMemories((prev) => {
151
+ const index = prev.findIndex((m) => m.id === memory.id);
152
+ if (index === -1)
153
+ return [memory, ...prev];
154
+ const next = [...prev];
155
+ next[index] = memory;
156
+ return next;
157
+ });
158
+ return;
159
+ }
160
+ // Saved into the scope that is already open: update in place.
161
+ if (scopeId && scopeId === selectedScopeId) {
162
+ setScopeEntries((prev) => {
163
+ const index = prev.findIndex((m) => m.id === memory.id);
164
+ const next = index === -1
165
+ ? [memory, ...prev]
166
+ : prev.map((m, i) => (i === index ? memory : m));
167
+ if (index === -1)
168
+ setScopeCount(scopeId, next.length);
169
+ return next;
170
+ });
171
+ return;
172
+ }
173
+ // A newly picked scope: only the server can resolve the item's
174
+ // name, path and write access, so reload and select it.
175
+ await load();
176
+ if (scopeId) {
177
+ setSelection({ kind: "scope", scopeId });
178
+ setEntriesRefresh((n) => n + 1);
179
+ }
180
+ }, [dialogTarget, selectedScopeId, setScopeCount, load]);
181
+ const deleteEntry = useCallback(async (entry) => {
182
+ try {
183
+ const result = await deleteAgentMemory(entry.id);
184
+ if (!result.success) {
185
+ setError(result.error || "Failed to delete");
186
+ return;
187
+ }
188
+ if (entry.scopeId) {
189
+ setScopeEntries((prev) => {
190
+ const next = prev.filter((m) => m.id !== entry.id);
191
+ setScopeCount(entry.scopeId, next.length);
192
+ return next;
193
+ });
194
+ }
195
+ else {
196
+ setPersonalMemories((prev) => prev.filter((m) => m.id !== entry.id));
197
+ }
198
+ }
199
+ catch (err) {
200
+ console.error("Failed to delete memory", err);
201
+ setError(err instanceof Error ? err.message : "Failed to delete");
202
+ }
203
+ }, [setScopeCount]);
204
+ // Confirmation is rendered by this panel itself: the settings workspace has no
205
+ // editor shell, so editContext.confirm silently does nothing there (other panels
206
+ // fell back to window.confirm for the same reason).
207
+ const confirmDelete = useCallback((entry) => {
208
+ setPendingDelete(entry);
209
+ }, []);
210
+ const profileName = useCallback((profileId) => {
211
+ const profile = profiles.find((p) => p.id?.toLowerCase() === profileId.toLowerCase());
212
+ return profile?.displayTitle || profile?.name || "Unknown profile";
213
+ }, [profiles]);
214
+ const personalByProfile = useMemo(() => {
215
+ const grouped = new Map();
216
+ for (const memory of personalMemories) {
217
+ const key = memory.profileId ?? "unknown";
218
+ const existing = grouped.get(key);
219
+ if (existing)
220
+ existing.push(memory);
221
+ else
222
+ grouped.set(key, [memory]);
223
+ }
224
+ return grouped;
225
+ }, [personalMemories]);
226
+ const selectedScope = selection?.kind === "scope"
227
+ ? scopes.find((s) => s.scopeId === selection.scopeId)
228
+ : undefined;
229
+ const listContent = (_jsx(SettingsPanelLayout, { children: _jsxs("div", { className: "overflow-hidden rounded-lg bg-white", children: [_jsxs("div", { className: "shrink-0 px-4 py-3", children: [_jsxs("div", { className: "flex flex-col gap-2 sm:flex-row sm:items-center", children: [_jsx(SearchInput, { value: searchQuery, onChange: setSearchQuery, placeholder: "Filter by name or path...", className: "w-full" }), _jsx("div", { className: "shrink-0 md:hidden", children: addGuidanceButton }), _jsx(Button, { size: "sm", variant: "ghost", onClick: () => void load(), title: "Refresh", children: _jsx(RefreshCw, { className: "h-4 w-4", strokeWidth: 1 }) })] }), error ? (_jsx("div", { className: "border-feedback-red bg-feedback-red-light text-feedback-red mt-2 rounded border p-2 text-xs whitespace-pre-wrap", children: error })) : null] }), _jsx("div", { className: "px-4 py-3", children: state === "loading" ? (_jsx(LoadingState, { message: "Loading memories..." })) : (_jsxs(_Fragment, { children: [_jsx("div", { className: "text-neutral-grey-50 mb-1 px-2 text-[11px] font-medium uppercase", children: "Content memories" }), filteredScopes.length === 0 ? (_jsxs("div", { className: "flex flex-col items-center justify-center px-6 py-8 text-center", children: [_jsx(Brain, { className: "text-neutral-grey-50 mb-3 h-9 w-9", strokeWidth: 1 }), _jsx("p", { className: "text-neutral-grey-50 text-sm font-medium", children: scopes.length === 0
230
+ ? "No content memories yet"
231
+ : "No matching content" }), _jsx("p", { className: "text-neutral-grey-50 mt-1 text-xs", children: scopes.length === 0
232
+ ? "Add tone of voice or terminology to a site, and every AI feature working below it will follow it."
233
+ : "Try a different search term." })] })) : (_jsx("div", { className: "divide-border-default divide-y", children: filteredScopes.map((scope) => {
234
+ const isSelected = selection?.kind === "scope" &&
235
+ selection.scopeId === scope.scopeId;
236
+ return (_jsxs("button", { type: "button", onClick: () => setSelection({
237
+ kind: "scope",
238
+ scopeId: scope.scopeId,
239
+ }), className: cn("hover:bg-neutral-grey-5 flex w-full flex-col items-start gap-0.5 px-2 py-2 text-left", isSelected && "bg-neutral-grey-5"), "data-testid": "memories-panel-scope", children: [_jsxs("span", { className: "text-neutral-grey-100 flex items-center gap-1.5 truncate text-sm font-medium", children: [scope.name || scope.path || scope.scopeId, !scope.canWrite && (_jsx(Lock, { className: "text-neutral-grey-50 h-3 w-3 shrink-0", strokeWidth: 1.5, "aria-label": "Read-only" }))] }), _jsx("span", { className: "text-neutral-grey-50 truncate text-[11px]", children: scope.path }), _jsxs("span", { className: "text-neutral-grey-50 text-[11px]", children: [scope.entryCount, " ", scope.entryCount === 1 ? "entry" : "entries"] })] }, scope.scopeId));
240
+ }) })), _jsx("div", { className: "text-neutral-grey-50 mt-4 mb-1 px-2 text-[11px] font-medium uppercase", children: "My memories" }), _jsxs("button", { type: "button", onClick: () => setSelection({ kind: "personal" }), className: cn("hover:bg-neutral-grey-5 flex w-full flex-col items-start gap-0.5 px-2 py-2 text-left", selection?.kind === "personal" && "bg-neutral-grey-5"), "data-testid": "memories-panel-personal", children: [_jsx("span", { className: "text-neutral-grey-100 text-sm font-medium", children: "Personal memories" }), _jsxs("span", { className: "text-neutral-grey-50 text-[11px]", children: [personalMemories.length, " ", personalMemories.length === 1 ? "entry" : "entries", " across", " ", personalByProfile.size, " ", personalByProfile.size === 1 ? "profile" : "profiles"] })] })] })) })] }) }));
241
+ const scopeDetail = selectedScopeId && (_jsxs("div", { className: "py-3", "data-testid": "memories-scope-detail", children: [_jsxs("div", { className: "flex items-start justify-between gap-3 px-4 pb-1", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("div", { className: "text-neutral-grey-100 truncate text-sm font-medium", children: selectedScope?.name || "Content memories" }), _jsx("div", { className: "text-neutral-grey-50 truncate text-[11px]", title: selectedScope?.path ?? undefined, children: selectedScope?.path })] }), entriesState === "success" && scopeCanWrite && (_jsxs(Button, { size: "sm", variant: "outline", className: "shrink-0", onClick: () => setDialogTarget({
242
+ kind: "guidance",
243
+ scopeId: selectedScopeId,
244
+ scopeLabel: selectedScope?.path || selectedScope?.name || undefined,
245
+ }), "data-testid": "memories-scope-add", children: [_jsx(Plus, { className: "mr-1 h-4 w-4", strokeWidth: 1 }), "Add memory"] }))] }), _jsxs("div", { className: "text-neutral-grey-50 px-4 pb-2 text-xs", children: ["Applies to this content and everything below it \u2014 in every language, or only the languages shown on the entry. Treated as a strong preference, not an enforced rule.", entriesState === "success" && !scopeCanWrite && (_jsxs("span", { className: "text-neutral-grey-100", children: [" ", "You don't have write access to this content, so these memories are read-only for you."] }))] }), entriesState === "loading" ? (_jsx("div", { className: "px-4 py-2", children: _jsx(LoadingState, { message: "Loading memories..." }) })) : entriesState === "error" ? (_jsx("div", { className: "border-feedback-red bg-feedback-red-light text-feedback-red mx-4 my-2 rounded border p-2 text-xs whitespace-pre-wrap", children: entriesError })) : scopeEntries.length === 0 ? (_jsx("div", { className: "text-neutral-grey-50 px-4 py-4 text-xs", children: "No memories on this content yet." })) : (_jsx("div", { className: "divide-border-default divide-y", children: scopeEntries.map((entry) => (_jsx(MemoryEntryRow, { entry: entry, canEdit: scopeCanWrite, onEdit: () => setDialogTarget({
246
+ kind: "guidance",
247
+ scopeId: selectedScopeId,
248
+ scopeLabel: selectedScope?.path || selectedScope?.name || undefined,
249
+ entry,
250
+ }), onDelete: () => confirmDelete(entry) }, entry.id))) }))] }));
251
+ const personalDetail = (_jsxs("div", { className: "py-3", "data-testid": "memories-personal-detail", children: [_jsxs("div", { className: "px-4 pb-1", children: [_jsx("div", { className: "text-neutral-grey-100 text-sm font-medium", children: "Personal memories" }), _jsx("div", { className: "text-neutral-grey-50 text-xs", children: "Facts and preferences agents keep in mind when working with you. Agents add to these as you work with them; only you see them." })] }), personalByProfile.size === 0 ? (_jsx("div", { className: "text-neutral-grey-50 px-4 py-4 text-xs", children: "No personal memories yet. Agents store durable facts here as you work with them." })) : (Array.from(personalByProfile.entries()).map(([profileId, entries]) => (_jsxs("div", { className: "mt-3", children: [_jsxs("div", { className: "flex items-center justify-between gap-2 px-4", children: [_jsx("div", { className: "text-neutral-grey-50 text-[11px] font-medium uppercase", children: profileName(profileId) }), _jsx(SimpleIconButton, { icon: _jsx(Plus, { className: "h-4 w-4", strokeWidth: 1 }), label: "Add memory", onClick: () => setDialogTarget({
252
+ kind: "personal",
253
+ profileId,
254
+ profileName: profileName(profileId),
255
+ }), "data-testid": "memories-personal-add" })] }), _jsx("div", { className: "divide-border-default divide-y", children: entries.map((entry) => (_jsx(MemoryEntryRow, { entry: entry, canEdit: true, onEdit: () => setDialogTarget({
256
+ kind: "personal",
257
+ profileId,
258
+ profileName: profileName(profileId),
259
+ entry,
260
+ }), onDelete: () => confirmDelete(entry) }, entry.id))) })] }, profileId))))] }));
261
+ const detailContent = (_jsx(SettingsPanelLayout, { children: _jsx("div", { className: "overflow-hidden rounded-lg bg-white", children: selection?.kind === "scope" ? (scopeDetail) : selection?.kind === "personal" ? (personalDetail) : (_jsx("div", { className: "text-neutral-grey-50 px-4 py-8 text-sm", children: "Select content on the left to see the memories that apply to it, or choose your personal memories." })) }) }));
262
+ const panels = [
263
+ { name: "list", content: listContent, defaultSize: 40, minSize: 25 },
264
+ { name: "detail", content: detailContent, defaultSize: 60, minSize: 30 },
265
+ ];
266
+ return (_jsxs(_Fragment, { children: [_jsx(Splitter, { panels: panels, localStorageKey: "memories-panel-splitter-v1", direction: "horizontal" }), _jsx(MemoryEntryDialog, { target: dialogTarget, onClose: () => setDialogTarget(null), onSaved: handleDialogSaved }), _jsx(AlertDialog, { open: !!pendingDelete, onOpenChange: (open) => !open && setPendingDelete(null), children: _jsxs(AlertDialogContent, { "data-testid": "memories-delete-confirm", children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: "Delete memory" }), _jsx(AlertDialogDescription, { children: pendingDelete?.scopeId
267
+ ? "Delete this memory? It applies to everyone working below this content, and this cannot be undone."
268
+ : "Delete this memory? This action cannot be undone." })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { children: "Cancel" }), _jsx(AlertDialogAction, { "data-testid": "memories-delete-confirm-accept", onClick: () => {
269
+ const entry = pendingDelete;
270
+ setPendingDelete(null);
271
+ if (entry)
272
+ void deleteEntry(entry);
273
+ }, children: "Delete" })] })] }) })] }));
274
+ }
275
+ /**
276
+ * One memory entry in a detail list. The content is intentionally only available
277
+ * in the edit dialog, keeping potentially sensitive or lengthy memories out of
278
+ * the list.
279
+ */
280
+ function MemoryEntryRow({ entry, canEdit, onEdit, onDelete, }) {
281
+ const languageBadges = memoryLanguageBadges(entry.languages);
282
+ const isOnDemand = entry.loadMode === "ondemand";
283
+ const updated = new Date(entry.updatedDate);
284
+ const meta = [
285
+ isNaN(updated.getTime()) ? null : `Updated ${formatDateTime(updated)}`,
286
+ entry.createdBy || null,
287
+ ]
288
+ .filter(Boolean)
289
+ .join(" · ");
290
+ return (_jsxs("div", { className: "flex items-start gap-3 px-4 py-3", "data-testid": "memories-entry", children: [_jsxs("div", { className: "min-w-0 flex-1", children: [(entry.title || languageBadges.length > 0 || isOnDemand) && (_jsxs("div", { className: "flex flex-wrap items-center gap-1.5", children: [entry.title && (_jsx("span", { className: "text-neutral-grey-100 text-sm font-medium", children: entry.title })), isOnDemand && (_jsx("span", { className: "border-border-default text-neutral-grey-50 rounded-full border px-1.5 text-[10px]", "data-testid": "memories-entry-load-mode", title: "Not in every prompt - the agent loads it by title when relevant", children: "On demand" })), languageBadges.map((badge) => (_jsx("span", { className: "border-border-default text-neutral-grey-50 rounded-full border px-1.5 text-[10px]", "data-testid": "memories-entry-language", children: badge }, badge)))] })), meta && (_jsx("div", { className: "text-neutral-grey-50 mt-1 text-[11px]", children: meta }))] }), canEdit && (_jsxs("div", { className: "flex shrink-0 items-center gap-1", children: [_jsx(SimpleIconButton, { icon: _jsx(Pencil, { className: "h-4 w-4", strokeWidth: 1 }), label: "Edit", onClick: onEdit, "data-testid": "memories-entry-edit" }), _jsx(SimpleIconButton, { icon: _jsx(DeleteIcon, { size: "lg" }), label: "Delete", onClick: onDelete, "data-testid": "memories-entry-delete" })] }))] }));
291
+ }
292
+ //# sourceMappingURL=MemoriesPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoriesPanel.js","sourceRoot":"","sources":["../../../../src/editor/settings/panels/MemoriesPanel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import React from "react";
2
+ import { type AgentMemoryEntry } from "../../services/agentService";
3
+ export declare const CONTENT_ROOT_ID = "0de95ae4-41ab-4d01-9eb0-67441b7c2450";
4
+ /**
5
+ * What the dialog creates or edits.
6
+ *
7
+ * The `guidance` kind is a content memory: attached to a content item, shared by everyone
8
+ * working below it. ("guidance" survives as the discriminant because the API scope name did.)
9
+ *
10
+ * - `guidance` without `entry`: create. The scope is always pickable; `scopeId` only
11
+ * pre-selects the picker (e.g. when adding from an open scope's detail pane).
12
+ * - `guidance` with `entry`: edit. The scope stays pickable - choosing a different item
13
+ * moves the memory there (the server authorizes write access on both ends).
14
+ * - `personal`: one of the user's own memories under an agent profile.
15
+ */
16
+ export type MemoryEntryDialogTarget = {
17
+ kind: "guidance";
18
+ scopeId?: string;
19
+ scopeLabel?: string | null;
20
+ entry?: AgentMemoryEntry;
21
+ } | {
22
+ kind: "personal";
23
+ profileId: string;
24
+ profileName?: string;
25
+ entry?: AgentMemoryEntry;
26
+ };
27
+ interface MemoryEntryDialogProps {
28
+ /** Non-null opens the dialog. */
29
+ target: MemoryEntryDialogTarget | null;
30
+ onClose: () => void;
31
+ /**
32
+ * Called after a successful save with the stored entry. For guidance,
33
+ * `scopeId` is the scope the entry was attached to.
34
+ */
35
+ onSaved: (memory: AgentMemoryEntry, scopeId?: string) => void | Promise<void>;
36
+ }
37
+ /**
38
+ * The one editor for memory entries in Settings - creating and editing, guidance and
39
+ * personal, all use this dialog so the fields, sizing and hints never diverge.
40
+ *
41
+ * (The chat tray deliberately does not use it: tray panels live inside a popover that
42
+ * unmounts on dismiss, so the tray keeps its small inline form.)
43
+ */
44
+ export declare function MemoryEntryDialog({ target, onClose, onSaved, }: MemoryEntryDialogProps): React.JSX.Element;
45
+ export {};