@wrongstack/webui 0.308.0 → 0.308.2
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/assets/{AgentRosterView-CIUKmLsb.js → AgentRosterView-BRsiLkYT.js} +1 -1
- package/dist/assets/{AnalyticsDashboard-B5nVNt6L.js → AnalyticsDashboard-wgm1_jI-.js} +1 -1
- package/dist/assets/{AudienceMemoryPanel-8nS326Uh.js → AudienceMemoryPanel-Dj2zRV6l.js} +1 -1
- package/dist/assets/{ChangesView-mapTz0_T.js → ChangesView-Cc7SriFS.js} +1 -1
- package/dist/assets/{ChronicleDashboard-DUzceZNb.js → ChronicleDashboard-CyqJjnDP.js} +1 -1
- package/dist/assets/{CodeEditor-OjU9rotb.js → CodeEditor-CrQxq-34.js} +1 -1
- package/dist/assets/{CodeMap-BB1WETLd.js → CodeMap-CAhE44jp.js} +1 -1
- package/dist/assets/{ConfirmModal-LBZaZgsG.js → ConfirmModal-gREeWWsa.js} +1 -1
- package/dist/assets/{CronJobsPanel-DJaiJw1W.js → CronJobsPanel-D6AfSxD8.js} +1 -1
- package/dist/assets/{DeadCodeScanPanel-nlQ9nL3Y.js → DeadCodeScanPanel-LOzt0Z1Z.js} +1 -1
- package/dist/assets/{DebugDashboard-BwSbR59I.js → DebugDashboard-CNdS9FFO.js} +1 -1
- package/dist/assets/{DesignGalleryView-DLKWmyVp.js → DesignGalleryView-CDDM4pDl.js} +1 -1
- package/dist/assets/{GoalView-BtSGdftD.js → GoalView-mzLqil_K.js} +1 -1
- package/dist/assets/{KanbanView-CyVG4DQu.js → KanbanView-Dlsji4r2.js} +1 -1
- package/dist/assets/{MailboxDetailView-2NJVLrjb.js → MailboxDetailView-Cxx74zQn.js} +1 -1
- package/dist/assets/{MemoryDrawer-n3cwB9m3.js → MemoryDrawer-BnT2jWmE.js} +1 -1
- package/dist/assets/MemoryManager-DlVmZ-0S.js +1 -0
- package/dist/assets/{ModelPicker-B21-QbDB.js → ModelPicker-CsaLCgdi.js} +1 -1
- package/dist/assets/{OfficeMapPanel-BKHjEIu9.js → OfficeMapPanel-B_95mXEy.js} +1 -1
- package/dist/assets/{ProcessMonitor-9TOnqT6l.js → ProcessMonitor-Dmmbx4lh.js} +1 -1
- package/dist/assets/PromptJournalView-DBCw7oeQ.js +1 -0
- package/dist/assets/{QueuePanel--PTd2-7z.js → QueuePanel-CKAGgWxS.js} +1 -1
- package/dist/assets/{RefreshDebugView-CuKbgI-T.js → RefreshDebugView-CKPQ_tKX.js} +1 -1
- package/dist/assets/{RequirementIntakeView-DnNSLw78.js → RequirementIntakeView-B5JKkW9E.js} +1 -1
- package/dist/assets/{SageTabs-B-m4WBoA.js → SageTabs-D04tfLki.js} +2 -2
- package/dist/assets/{SddFlowGraph-DdYgCVM_.js → SddFlowGraph-BCgIDw11.js} +1 -1
- package/dist/assets/{SddHub-DZCKF3Gw.js → SddHub-CkH8Kv7V.js} +1 -1
- package/dist/assets/{SessionInspectView-Cf4ypYKn.js → SessionInspectView-PA6jl9bt.js} +1 -1
- package/dist/assets/{SessionList-D4D2Cai9.js → SessionList-vOuy4gzk.js} +1 -1
- package/dist/assets/{SessionsDashboard-DoAbZStd.js → SessionsDashboard-DXt34ZON.js} +1 -1
- package/dist/assets/{SetupScreen-CMrLwoo9.js → SetupScreen-Cm50YBwk.js} +1 -1
- package/dist/assets/{SkillDetailView-sVjQG3qG.js → SkillDetailView-BBu6DBBh.js} +1 -1
- package/dist/assets/{SpecsView-B53AUOo3.js → SpecsView-DeHi6LWP.js} +1 -1
- package/dist/assets/{TechStackView-iONTty84.js → TechStackView-cARkf3Ep.js} +1 -1
- package/dist/assets/{TerminalPanel-1mqoe2_8.js → TerminalPanel-HWOYFCGa.js} +1 -1
- package/dist/assets/{Toaster-wXvKXbbS.js → Toaster-CQLQAp7y.js} +1 -1
- package/dist/assets/{activity-DWHlYL9x.js → activity-BCIzGgqa.js} +2 -2
- package/dist/assets/{activity-DTSVEiLK.js → activity-BZIZDVJp.js} +2 -2
- package/dist/assets/{activity-jL8-j1D0.js → activity-CQqsspgO.js} +2 -2
- package/dist/assets/{activity-C0qPnCbW.js → activity-ChTE_hao.js} +2 -2
- package/dist/assets/{activity-DjnYvN9C.js → activity-CnuG3uZL.js} +2 -2
- package/dist/assets/{activity-fdbTRXeg.js → activity-DFBPo9d3.js} +2 -2
- package/dist/assets/{activity-phJuGuf4.js → activity-K2WIjlQo.js} +2 -2
- package/dist/assets/{i18n-CDoHRskt.js → i18n-CcHSmDoO.js} +2 -2
- package/dist/assets/{index-BUQkH6BW.js → index-Bj3blCRO.js} +6 -6
- package/dist/assets/index-DBU8t21H.css +1 -0
- package/dist/assets/{roster-ws-Cinqwkgb.js → roster-ws-XgkT9mo8.js} +1 -1
- package/dist/assets/settings-50uwXQIW.js +1 -0
- package/dist/assets/settings-BPT8LWkU.js +1 -0
- package/dist/assets/settings-BmJI-gam.js +1 -0
- package/dist/assets/settings-CqFe8Jtz.js +1 -0
- package/dist/assets/settings-DeM0wvCG.js +1 -0
- package/dist/assets/settings-DijFr-kZ.js +1 -0
- package/dist/assets/settings-L9mLQIIP.js +1 -0
- package/dist/assets/{stores-B0SETQK4.js → stores-kaIFQfXo.js} +1 -1
- package/dist/assets/{useWebSocket-DCx7NrvL.js → useWebSocket-DjrFK4tQ.js} +6 -6
- package/dist/assets/vector-memory-panel-CjqIA8Vf.js +1 -0
- package/dist/assets/ws-client-BVq0hf0a.js +1 -0
- package/dist/components/MemoryManager/MemorySearchBreakdown.d.ts +14 -0
- package/dist/components/MemoryManager/useMemoryManagerState.d.ts +7 -0
- package/dist/components/vector-memory-panel/model.d.ts +16 -0
- package/dist/hooks/useWebSocket.d.ts +5 -0
- package/dist/index.html +11 -11
- package/dist/index.js +2557 -2059
- package/dist/lib/ws-client-actions.d.ts +10 -0
- package/dist/lib/ws-client-utils.d.ts +7 -6
- package/dist/lib/ws-client.d.ts +12 -0
- package/dist/types/client-message.d.ts +7 -0
- package/dist/types/connections.d.ts +10 -0
- package/dist/types/sage.d.ts +28 -0
- package/dist/types/server-message.d.ts +6 -3
- package/package.json +8 -8
- package/dist/assets/MemoryManager-CetsTR6O.js +0 -1
- package/dist/assets/PromptJournalView-0F-HTGHg.js +0 -1
- package/dist/assets/index-BRs425Ir.css +0 -1
- package/dist/assets/settings-4A6zNjep.js +0 -1
- package/dist/assets/settings-Bq1PPj3V.js +0 -1
- package/dist/assets/settings-BxL8m0v6.js +0 -1
- package/dist/assets/settings-CZR4viP9.js +0 -1
- package/dist/assets/settings-CbtB0i7o.js +0 -1
- package/dist/assets/settings-L8hBHrGD.js +0 -1
- package/dist/assets/settings-uLdezc9e.js +0 -1
- package/dist/assets/vector-memory-panel-D1zQSMIW.js +0 -1
- package/dist/assets/ws-client-C2ppA8xa.js +0 -1
|
@@ -20,6 +20,16 @@ export interface WsClientActionMethods {
|
|
|
20
20
|
listMemoryCandidates(params?: {
|
|
21
21
|
includeResolved?: boolean;
|
|
22
22
|
}, options?: WSSendOptions): void;
|
|
23
|
+
/**
|
|
24
|
+
* Search SAGE memory and return the per-channel score breakdown
|
|
25
|
+
* (lexical / vector / RRF final / source attribution). Used by the
|
|
26
|
+
* Memory panel to surface WHY a memory matched.
|
|
27
|
+
*/
|
|
28
|
+
searchSageBreakdown(params: {
|
|
29
|
+
query: string;
|
|
30
|
+
limit?: number;
|
|
31
|
+
includeStale?: boolean;
|
|
32
|
+
}, options?: WSSendOptions): void;
|
|
23
33
|
getSage(id: string, options?: WSSendOptions): void;
|
|
24
34
|
getSageGraph(query: string, params?: {
|
|
25
35
|
maxDepth?: number;
|
|
@@ -11,13 +11,14 @@ export type EventHandler<K extends WSServerMessage['type'] = WSServerMessage['ty
|
|
|
11
11
|
}>) => void;
|
|
12
12
|
/**
|
|
13
13
|
* Returns true when a server message is intended for the currently-active
|
|
14
|
-
* session. The server tags session-scoped messages with `payload.sessionId
|
|
15
|
-
* messages without one (or when no session is active yet) are treated as
|
|
16
|
-
* active so boot-time broadcasts aren't dropped.
|
|
14
|
+
* session. The server tags session-scoped messages with `payload.sessionId`.
|
|
17
15
|
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
16
|
+
* Fail-closed semantics (the cross-session todo bleed fix): a message whose
|
|
17
|
+
* `sessionId` is present-but-EMPTY is rejected. The server stamps
|
|
18
|
+
* `sessionId: ''` when its context has no session (see sessionPayload), and
|
|
19
|
+
* that stamp must not silently widen into "every session". Messages with NO
|
|
20
|
+
* sessionId key at all, or when no session is active yet, still pass so
|
|
21
|
+
* boot-time and project-wide broadcasts are not dropped.
|
|
21
22
|
*/
|
|
22
23
|
export declare function isActiveSessionMessage(msg: WSServerMessage): boolean;
|
|
23
24
|
/**
|
package/dist/lib/ws-client.d.ts
CHANGED
|
@@ -58,6 +58,7 @@ declare class WrongStackWebSocketClientBase {
|
|
|
58
58
|
private statusListeners;
|
|
59
59
|
private currentStatus;
|
|
60
60
|
private suppressedChatEchoes;
|
|
61
|
+
private echoSweepTimer;
|
|
61
62
|
private protocolCapabilities;
|
|
62
63
|
private protocolVersion;
|
|
63
64
|
supportsCapability(capability: string): boolean;
|
|
@@ -124,6 +125,17 @@ declare class WrongStackWebSocketClientBase {
|
|
|
124
125
|
send(message: WSClientMessage, options?: WSSendOptions): boolean;
|
|
125
126
|
/** Consume one UI-originated response that must not be mirrored into chat. */
|
|
126
127
|
consumeSuppressedChatEcho(responseType: string): boolean;
|
|
128
|
+
/**
|
|
129
|
+
* Lazy periodic sweep for `suppressedChatEchoes`. TTL trimming otherwise
|
|
130
|
+
* runs only on consume — a response type that is suppressed but never
|
|
131
|
+
* consumed (chat view unmounted, user on another screen) retains up to
|
|
132
|
+
* MAX_PER_TYPE stale timestamps indefinitely. The sweep bounds retention
|
|
133
|
+
* to TTL + one sweep interval and self-stops when the map empties, so no
|
|
134
|
+
* timer runs for clients that never suppress. RAM-leak audit 2026-08-11
|
|
135
|
+
* Finding 4 / fix 2026-08-16.
|
|
136
|
+
*/
|
|
137
|
+
private ensureEchoSweep;
|
|
138
|
+
private sweepSuppressedChatEchoes;
|
|
127
139
|
/**
|
|
128
140
|
* Register a handler for a server message type. Two overloads:
|
|
129
141
|
* - `on('text_delta', (msg) => …)` — msg is narrowed to the matching union
|
|
@@ -651,6 +651,13 @@ export type WSClientMessageCore = WSUserMessage | {
|
|
|
651
651
|
} | {
|
|
652
652
|
type: 'memory.sage.forFile';
|
|
653
653
|
payload: WSMemorySageForFileRequest;
|
|
654
|
+
} | {
|
|
655
|
+
type: 'memory.sage.searchBreakdown';
|
|
656
|
+
payload: {
|
|
657
|
+
query: string;
|
|
658
|
+
limit?: number | undefined;
|
|
659
|
+
includeStale?: boolean | undefined;
|
|
660
|
+
};
|
|
654
661
|
} | {
|
|
655
662
|
type: 'memory.sage.remember';
|
|
656
663
|
payload: {
|
|
@@ -39,4 +39,14 @@ export interface ServiceActionResult {
|
|
|
39
39
|
success: boolean;
|
|
40
40
|
message: string;
|
|
41
41
|
}
|
|
42
|
+
/** Server→client auto-heal visibility event (`connections.auto_heal_status`). */
|
|
43
|
+
export type AutoHealStatusPhase = 'restarting' | 'restarted' | 'failed' | 'escalated' | 'refused';
|
|
44
|
+
export interface AutoHealStatusEvent {
|
|
45
|
+
serviceId: ConnectionHealthService['id'] | null;
|
|
46
|
+
phase: AutoHealStatusPhase;
|
|
47
|
+
message: string;
|
|
48
|
+
at: number;
|
|
49
|
+
/** 1-based attempt number within the current failure streak. */
|
|
50
|
+
attempt: number;
|
|
51
|
+
}
|
|
42
52
|
//# sourceMappingURL=connections.d.ts.map
|
package/dist/types/sage.d.ts
CHANGED
|
@@ -94,6 +94,34 @@ export interface WSMemorySageGraph {
|
|
|
94
94
|
error?: string | undefined;
|
|
95
95
|
};
|
|
96
96
|
}
|
|
97
|
+
/**
|
|
98
|
+
* One hit in the breakdown-shaped search response. `vectorScore` is
|
|
99
|
+
* null when the result only came from the lexical channel (no
|
|
100
|
+
* semantic contribution); `lexicalScore` is null when only the
|
|
101
|
+
* vector channel found it. `finalScore` is the RRF-style combined
|
|
102
|
+
* score the WebUI should sort by default. `source` is a hint for
|
|
103
|
+
* the renderer (color-coding).
|
|
104
|
+
*/
|
|
105
|
+
export interface WSSearchBreakdownHit {
|
|
106
|
+
memory: SageEntry;
|
|
107
|
+
vectorScore: number | null;
|
|
108
|
+
lexicalScore: number | null;
|
|
109
|
+
finalScore: number;
|
|
110
|
+
source: 'lexical' | 'vector' | 'both';
|
|
111
|
+
}
|
|
112
|
+
export interface WSMemorySageSearchBreakdown {
|
|
113
|
+
type: 'memory.sage.searchBreakdown';
|
|
114
|
+
payload: {
|
|
115
|
+
hits?: WSSearchBreakdownHit[] | undefined;
|
|
116
|
+
/**
|
|
117
|
+
* `breakdown` when the rich variant was used; `lexical` when the
|
|
118
|
+
* fallback synthesized the score. Lets the UI decide whether to
|
|
119
|
+
* render a dual-column score card or a single lexical column.
|
|
120
|
+
*/
|
|
121
|
+
source?: 'breakdown' | 'lexical' | undefined;
|
|
122
|
+
error?: string | undefined;
|
|
123
|
+
};
|
|
124
|
+
}
|
|
97
125
|
export interface WSMemorySageUpdate {
|
|
98
126
|
type: 'memory.sage.update';
|
|
99
127
|
payload: {
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import type { BrainConfigWire } from './brain.js';
|
|
2
2
|
import type { ChronicleFacet, ChronicleFacetValue, ChronicleGraphResult, ChronicleMetricsResultPayload, ChronicleQueryResult, ChronicleStatus } from './chronicle.js';
|
|
3
3
|
import type { WSCollabAnnotationAdded, WSCollabAnnotationResolved, WSCollabEvent, WSCollabInjectionGranted, WSCollabParticipantJoined, WSCollabParticipantLeft, WSCollabPauseGranted, WSCollabPauseReleased, WSCollabState } from './collab.js';
|
|
4
|
-
import type { ConnectionsHealthReport, ServiceActionResult } from './connections.js';
|
|
4
|
+
import type { AutoHealStatusEvent, ConnectionsHealthReport, ServiceActionResult } from './connections.js';
|
|
5
5
|
import type { WSAgentStatusChanged, WSAgentTimelineMessage, WSEternalIteration, WSGoalAssessResult, WSGoalLifecycle, WSGoalList, WSGoalProgress, WSGoalState, WSKanbanResult, WSKanbanTaskActivity, WSModesList, WSWorktreeCleanupResult, WSWorktreeDiffResult, WSWorktreeEvent, WSWorktreeMergeResult, WSWorktreeOrphans, WSWorktreeState } from './goal-kanban-worktree.js';
|
|
6
6
|
import type { SessionScopedPayload, WSCodeMapToolExecuted, WSCodeMapToolStarted, WSIterationCompleted, WSIterationLimitReached, WSIterationStarted, WSProviderActiveBlocked, WSProviderError, WSProviderFallback, WSProviderFallbackPending, WSProviderResponse, WSProviderRetry, WSProviderStatusChanged, WSProviderStatusSnapshot, WSProviderStreamError, WSRunResult, WSSessionEnd, WSSessionStart, WSTextDelta, WSThinkingDelta, WSToolExecuted, WSToolProgress, WSToolUseStart } from './protocol-core.js';
|
|
7
7
|
import type { WSCompactionFailed, WSContextCompacted, WSContextDebug, WSContextEditorApplied, WSContextEditorSnapshot, WSContextEditorValidation, WSContextMaxContext, WSContextModeChanged, WSContextModesList, WSContextPct, WSContextRepaired, WSDelegateCompleted, WSDelegateStarted, WSError, WSMemoryList, WSSessionStats, WSTokenCostEstimateUnavailable, WSTokenThreshold, WSToolConfirmNeeded, WSToolLoopDetected, WSToolsList, WSTopicAdviceResult, WSTrustPersisted } from './runtime.js';
|
|
8
|
-
import type { WSMemorySageBackfillRecoverable, WSMemorySageCandidateResolve, WSMemorySageDelete, WSMemorySageForFile, WSMemorySageGet, WSMemorySageGraph, WSMemorySageList, WSMemorySageListCandidates, WSMemorySageListPage, WSMemorySageRecover, WSMemorySageRemember, WSMemorySageUpdate } from './sage.js';
|
|
8
|
+
import type { WSMemorySageBackfillRecoverable, WSMemorySageCandidateResolve, WSMemorySageDelete, WSMemorySageForFile, WSMemorySageGet, WSMemorySageGraph, WSMemorySageList, WSMemorySageListCandidates, WSMemorySageListPage, WSMemorySageRecover, WSMemorySageRemember, WSMemorySageSearchBreakdown, WSMemorySageUpdate } from './sage.js';
|
|
9
9
|
import type { WSDesignList, WSDesignMaterialize, WSDesignSet, WSDesignState, WSDesignSwap, WSDesignTune, WSDesignUse, WSDesignVerify, WSSkillContent, WSSkillsCreated, WSSkillsEdited, WSSkillsExported, WSSkillsInstalled, WSSkillsList, WSSkillsUninstalled, WSSkillsUpdated } from './skills-design.js';
|
|
10
10
|
import type { WSAuthOAuthStatus, WSCatalogModelSearchResult, WSCompletionResult, WSDiagGet, WSFilesList, WSKeyOperationResult, WSModelSwitchResult, WSProviderCatalog, WSProviderModels, WSProviderProbe, WSSavedProviders, WSSessionInspect, WSSessionsList, WSSideEffects, WSStatsGet, WSTodosCleared, WSTodosUpdated } from './system.js';
|
|
11
|
-
export type WSServerMessage = WSSessionStart | WSSessionEnd | WSTextDelta | WSThinkingDelta | WSToolUseStart | WSToolProgress | WSToolExecuted | WSCodeMapToolStarted | WSCodeMapToolExecuted | WSIterationStarted | WSIterationCompleted | WSIterationLimitReached | WSProviderResponse | WSProviderRetry | WSProviderError | WSProviderFallback | WSProviderFallbackPending | WSProviderStatusChanged | WSProviderStatusSnapshot | WSProviderActiveBlocked | WSProviderStreamError | WSRunResult | WSSessionStats | WSError | WSToolConfirmNeeded | WSTrustPersisted | WSToolLoopDetected | WSDelegateStarted | WSDelegateCompleted | WSContextDebug | WSContextCompacted | WSCompactionFailed | WSContextRepaired | WSContextEditorSnapshot | WSContextEditorValidation | WSContextEditorApplied | WSContextPct | WSTopicAdviceResult | WSContextMaxContext | WSTokenThreshold | WSTokenCostEstimateUnavailable | WSContextModesList | WSContextModeChanged | WSToolsList | WSMemoryList | WSMemorySageList | WSMemorySageListPage | WSMemorySageListCandidates | WSMemorySageGet | WSMemorySageGraph | WSMemorySageUpdate | WSMemorySageRemember | WSMemorySageDelete | WSMemorySageRecover | WSMemorySageCandidateResolve | WSMemorySageBackfillRecoverable | WSMemorySageForFile | WSSkillsList | WSSkillContent | WSDesignList | WSDesignUse | WSDesignState | WSDesignSet | WSDesignTune | WSDesignSwap | WSDesignMaterialize | WSDesignVerify | WSSkillsInstalled | WSSkillsUninstalled | WSSkillsUpdated | WSSkillsCreated | WSSkillsEdited | WSSkillsExported | WSDiagGet | WSStatsGet | {
|
|
11
|
+
export type WSServerMessage = WSSessionStart | WSSessionEnd | WSTextDelta | WSThinkingDelta | WSToolUseStart | WSToolProgress | WSToolExecuted | WSCodeMapToolStarted | WSCodeMapToolExecuted | WSIterationStarted | WSIterationCompleted | WSIterationLimitReached | WSProviderResponse | WSProviderRetry | WSProviderError | WSProviderFallback | WSProviderFallbackPending | WSProviderStatusChanged | WSProviderStatusSnapshot | WSProviderActiveBlocked | WSProviderStreamError | WSRunResult | WSSessionStats | WSError | WSToolConfirmNeeded | WSTrustPersisted | WSToolLoopDetected | WSDelegateStarted | WSDelegateCompleted | WSContextDebug | WSContextCompacted | WSCompactionFailed | WSContextRepaired | WSContextEditorSnapshot | WSContextEditorValidation | WSContextEditorApplied | WSContextPct | WSTopicAdviceResult | WSContextMaxContext | WSTokenThreshold | WSTokenCostEstimateUnavailable | WSContextModesList | WSContextModeChanged | WSToolsList | WSMemoryList | WSMemorySageList | WSMemorySageListPage | WSMemorySageListCandidates | WSMemorySageGet | WSMemorySageGraph | WSMemorySageSearchBreakdown | WSMemorySageUpdate | WSMemorySageRemember | WSMemorySageDelete | WSMemorySageRecover | WSMemorySageCandidateResolve | WSMemorySageBackfillRecoverable | WSMemorySageForFile | WSSkillsList | WSSkillContent | WSDesignList | WSDesignUse | WSDesignState | WSDesignSet | WSDesignTune | WSDesignSwap | WSDesignMaterialize | WSDesignVerify | WSSkillsInstalled | WSSkillsUninstalled | WSSkillsUpdated | WSSkillsCreated | WSSkillsEdited | WSSkillsExported | WSDiagGet | WSStatsGet | {
|
|
12
12
|
type: 'connections.health_result';
|
|
13
13
|
payload: ConnectionsHealthReport;
|
|
14
14
|
} | {
|
|
@@ -19,6 +19,9 @@ export type WSServerMessage = WSSessionStart | WSSessionEnd | WSTextDelta | WSTh
|
|
|
19
19
|
} | {
|
|
20
20
|
type: 'connections.service_action_result';
|
|
21
21
|
payload: ServiceActionResult;
|
|
22
|
+
} | {
|
|
23
|
+
type: 'connections.auto_heal_status';
|
|
24
|
+
payload: AutoHealStatusEvent;
|
|
22
25
|
} | {
|
|
23
26
|
type: 'chronicle.status_result';
|
|
24
27
|
payload: ChronicleStatus;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wrongstack/webui",
|
|
3
|
-
"version": "0.308.
|
|
3
|
+
"version": "0.308.2",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Browser-based WebUI for WrongStack — React + Vite frontend. The WebSocket backend lives in the separate @wrongstack/webui-server package (extracted in PR #018b to remove the CLI -> @wrongstack/webui/server cross-package edge).",
|
|
6
6
|
"keywords": [
|
|
@@ -76,12 +76,12 @@
|
|
|
76
76
|
"tailwind-merge": "^3.6.0",
|
|
77
77
|
"virtua": "^0.50.1",
|
|
78
78
|
"zustand": "^5.0.15",
|
|
79
|
-
"@wrongstack/
|
|
80
|
-
"@wrongstack/
|
|
81
|
-
"@wrongstack/
|
|
82
|
-
"@wrongstack/
|
|
83
|
-
"@wrongstack/
|
|
84
|
-
"@wrongstack/
|
|
79
|
+
"@wrongstack/core": "0.308.2",
|
|
80
|
+
"@wrongstack/kanban": "0.308.2",
|
|
81
|
+
"@wrongstack/webui-server": "0.308.2",
|
|
82
|
+
"@wrongstack/providers": "0.308.2",
|
|
83
|
+
"@wrongstack/tools": "0.308.2",
|
|
84
|
+
"@wrongstack/plugins": "0.308.2"
|
|
85
85
|
},
|
|
86
86
|
"optionalDependencies": {
|
|
87
87
|
"node-pty": "1.2.0-beta.14"
|
|
@@ -103,7 +103,7 @@
|
|
|
103
103
|
"typescript": "^7.0.2",
|
|
104
104
|
"vite": "^8.2.1",
|
|
105
105
|
"vitest": "^4.1.10",
|
|
106
|
-
"@wrongstack/sdd": "0.308.
|
|
106
|
+
"@wrongstack/sdd": "0.308.2"
|
|
107
107
|
},
|
|
108
108
|
"scripts": {
|
|
109
109
|
"dev": "vite",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{Ba as t,Br as n,Ea as r,Fi as i,Ft as a,Ga as o,Ma as s,Nn as c,Ot as l,Pn as u,Pr as d,Tn as f,Vn as p,Vt as m,Wt as h,Zt as g,_,_a as v,a as y,an as ee,da as b,dt as te,ea as x,f as S,hi as C,i as w,jt as T,kn as ne,li as E,lt as re,n as ie,na as ae,or as D,pr as oe,qi as se,r as ce,ra as O,s as k,un as A,xi as j,yn as M}from"./vendor-C_zEzV4N.js";import"./i18n-CDoHRskt.js";import{t as le}from"./useWebSocket-DCx7NrvL.js";import{t as N}from"./utils-tsZEnrBH.js";import{I as ue}from"./stores-B0SETQK4.js";import{n as de}from"./ui-store-xx1NssJI.js";import{a as fe,i as P,n as F,o as pe,r as I,t as me}from"./dialog-BJjDUqb3.js";import{t as L}from"./button-DvpRpKkt.js";import{t as R}from"./input-BtoHcCl9.js";import{c as z}from"./index-BUQkH6BW.js";import{t as he}from"./roster-ws-Cinqwkgb.js";import{_ as ge,a as _e,b as ve,c as B,d as ye,f as be,g as V,h as xe,i as Se,l as Ce,m as we,n as Te,o as Ee,p as De,r as H,s as U,t as Oe,u as ke,v as Ae,y as W}from"./shared-B3czc2Dj.js";import{t as je}from"./MemoryDrawer-n3cwB9m3.js";var G=re();function Me({busyAction:e,deletingId:n,memories:r,onCancel:i,onConfirm:a,onOpenChange:o}){let{t:s}=t();return(0,G.jsx)(me,{open:!!n,onOpenChange:o,children:(0,G.jsxs)(F,{className:`max-w-md`,children:[(0,G.jsxs)(fe,{children:[(0,G.jsx)(`span`,{className:`mb-2 flex size-10 items-center justify-center border border-destructive/35 bg-destructive/10 text-destructive`,children:(0,G.jsx)(T,{className:`size-4`})}),(0,G.jsx)(pe,{children:s(`activity:memoryManager.deleteTitle`)}),(0,G.jsx)(I,{className:`leading-6`,children:s(`activity:deleteMemoryDialog.sageWillMarkTheRecordDeleted`)})]}),(0,G.jsx)(`div`,{className:`border border-border/70 bg-background/45 p-3 text-xs text-muted-foreground`,children:V(r.find(e=>e.id===n)?.text??``,180)}),(0,G.jsxs)(P,{children:[(0,G.jsx)(L,{variant:`outline`,onClick:i,disabled:e===`delete`,children:s(`common:action.cancel`)}),(0,G.jsxs)(L,{variant:`destructive`,onClick:a,disabled:e===`delete`,children:[e===`delete`?(0,G.jsx)(D,{className:`size-4 animate-spin`}):(0,G.jsx)(T,{className:`size-4`}),s(e===`delete`?`activity:memoryManager.deletingLabel`:`activity:memoryManager.actionDeleteMemory`)]})]})]})})}var K=e(o(),1),Ne=212,Pe=188;function q(e){return e.length>14?`${e.slice(0,11)}…`:e}function Fe(e,t=58){let n=e.replace(/\s+/g,` `).trim();return n.length>t?`${n.slice(0,t-1)}…`:n}function J(e){return e.type===`symbol`?[e.path,e.symbol?`#${e.symbol}`:``].filter(Boolean).join(``):e.path??e.command??e.symbol??e.role??e.type}function Y(e){return e===`active`?`border-success/45 bg-success/10 text-success`:e===`stale`?`border-warning/45 bg-warning/10 text-warning`:e===`contradicted`?`border-destructive/45 bg-destructive/10 text-destructive`:e===`superseded`?`border-warning/35 bg-warning/5 text-warning`:`border-border bg-muted/55 text-muted-foreground`}function X({data:e}){let{entry:t,center:n}=e;return(0,G.jsxs)(`div`,{className:n?`border border-primary/70 bg-card px-3 py-2.5 text-card-foreground shadow-[0_0_0_1px_hsl(var(--primary)/0.2),0_0_24px_hsl(var(--primary)/0.12)]`:`border border-border/80 bg-card/95 px-3 py-2.5 text-card-foreground shadow-lg`,style:{width:Ne},title:t.text,children:[(0,G.jsx)(k,{type:`target`,position:_.Top,className:`!border-background !bg-muted-foreground`}),(0,G.jsx)(k,{type:`source`,position:_.Bottom,className:`!border-background !bg-primary`}),(0,G.jsx)(k,{type:`source`,position:_.Right,className:`!border-background !bg-primary`}),(0,G.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,G.jsx)(`span`,{className:`border px-1.5 py-0.5 text-[9px] font-bold uppercase ${Y(t.status)}`,children:t.status}),(0,G.jsx)(`span`,{className:`ml-auto truncate font-mono text-[9px] text-muted-foreground`,children:q(t.id)})]}),(0,G.jsx)(`p`,{className:`mt-2 line-clamp-2 text-[11px] leading-4 text-foreground/90`,children:Fe(t.text)}),(0,G.jsx)(`p`,{className:`mt-1 font-mono text-[9px] uppercase text-muted-foreground`,children:t.kind})]})}function Ie({data:e}){return(0,G.jsxs)(`div`,{className:`border border-info/40 bg-info/8 px-2.5 py-2 text-card-foreground shadow-lg`,style:{width:Pe},title:e.label,children:[(0,G.jsx)(k,{type:`target`,position:_.Left,className:`!border-background !bg-info`}),(0,G.jsx)(`p`,{className:`font-mono text-[9px] font-bold uppercase text-info`,children:e.anchor.type}),(0,G.jsx)(`p`,{className:`mt-1 truncate font-mono text-[10px] text-foreground/85`,children:e.label})]})}var Le={memoryNode:X,anchorNode:Ie};function Z(e,t){return{id:e,revision:0,scope:`project`,kind:`fact`,status:`deleted`,text:t(`activity:memoryManager.memoryUnavailable`),importance:0,confidence:0,freshness:0,tags:[],anchors:[],createdAt:``,updatedAt:``}}function Re({nodes:e,edges:t,className:n}){return(0,G.jsx)(`div`,{className:N(`w-full`,n),children:(0,G.jsxs)(S,{nodes:e,edges:t,nodeTypes:Le,fitView:!0,fitViewOptions:{padding:.24,maxZoom:1.05},minZoom:.4,maxZoom:1.5,nodesConnectable:!1,elementsSelectable:!1,panOnScroll:!1,zoomOnScroll:!1,proOptions:{hideAttribution:!0},children:[(0,G.jsx)(ce,{variant:w.Dots,gap:18,size:1,color:`hsl(var(--muted-foreground) / 0.18)`}),(0,G.jsx)(y,{showInteractive:!1,className:`!border-border !bg-card !shadow-lg`})]})})}function Q({centerMemory:e,allMemories:n,graphEdges:r,loading:i=!1,error:a=null}){let{t:o}=t(),[s,c]=(0,K.useState)(!1),l=`mem:${e.id}`,u=(0,K.useMemo)(()=>r.filter(e=>e.from===l&&e.to.startsWith(`mem:`)||e.to===l&&e.from.startsWith(`mem:`)).slice(0,24),[l,r]),{nodes:d,edges:f}=(0,K.useMemo)(()=>{let t=[],r=[],i=new Map(n.map(e=>[e.id,e]));t.push({id:e.id,type:`memoryNode`,position:{x:320-Ne/2,y:120},data:{entry:e,center:!0}});let a=[...e.supersededBy?[{id:e.supersededBy,relation:`superseded by`}]:[],...(e.supersedes??[]).map(e=>({id:e,relation:`supersedes`})),...(e.contradicts??[]).map(e=>({id:e,relation:`contradicts`}))];for(let e of u){let t=(e.from===l?e.to:e.from).slice(4);a.some(n=>n.id===t&&n.relation===e.relation)||a.push({id:t,relation:e.relation,weight:e.weight,evidence:e.evidence})}let s=320-(a.length-1)*220/2;return a.forEach((n,a)=>{let c=i.get(n.id)??Z(n.id,o),l=n.relation===`superseded by`,u=l?0:280+Math.floor(a/3)*130,d=l?320-Ne/2:s+a*220-Ne/2;t.push({id:`memory:${n.id}:${a}`,type:`memoryNode`,position:{x:d,y:u},data:{entry:c,center:!1}});let f=n.relation===`contradicts`,p=l?`memory:${n.id}:${a}`:e.id,m=l?e.id:`memory:${n.id}:${a}`;r.push({id:`relation:${n.relation}:${n.id}:${a}`,source:p,target:m,type:`smoothstep`,animated:!f,label:n.weight===void 0?n.relation:`${n.relation} ${n.weight.toFixed(2)}`,data:{evidence:n.evidence??[]},style:{stroke:f?`hsl(var(--destructive))`:`hsl(var(--primary))`,strokeWidth:1.7,...f?{strokeDasharray:`5 4`}:{}},labelStyle:{fill:f?`hsl(var(--destructive))`:`hsl(var(--muted-foreground))`,fontSize:9,fontWeight:700},labelBgStyle:{fill:`hsl(var(--card))`,fillOpacity:.9}})}),e.anchors.forEach((n,i)=>{let a=`anchor:${i}`;t.push({id:a,type:`anchorNode`,position:{x:540,y:120+(i-(e.anchors.length-1)/2)*66},data:{anchor:n,label:J(n)}}),r.push({id:`anchor-edge:${i}`,source:e.id,target:a,type:`smoothstep`,style:{stroke:`hsl(var(--info))`,strokeWidth:1.3}})}),{nodes:t,edges:r}},[n,e,l,u]);return d.length<=1&&!i&&!a?null:(0,G.jsxs)(`section`,{className:`overflow-hidden border border-border/75 bg-background/35`,"aria-label":o(`activity:memoryManager.graphAria`),children:[(0,G.jsxs)(`div`,{className:`flex items-center justify-between border-b border-border/70 bg-card/55 px-3 py-2`,children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,G.jsx)(`p`,{className:`text-[10px] font-bold uppercase tracking-[0.16em] text-muted-foreground`,children:o(`activity:memoryManager.graphHeading`)}),d.length>1&&(0,G.jsxs)(L,{variant:`ghost`,size:`sm`,onClick:()=>c(!0),className:`h-6 gap-1 px-2 text-[9px] font-bold uppercase tracking-[0.12em]`,"aria-label":o(`activity:memoryManager.graphFullscreenAria`),children:[(0,G.jsx)(C,{className:`size-3`}),o(`activity:memoryManager.graphOpenFullscreen`)]})]}),(0,G.jsx)(`span`,{className:`font-mono text-[10px] text-muted-foreground`,children:i?o(`activity:memoryManager.loadingGraph`):o(`activity:memoryManager.graphStats`,{nodes:d.length,edges:f.length})})]}),a&&(0,G.jsx)(`p`,{className:`border-b border-destructive/25 bg-destructive/5 px-3 py-2 text-[10px] text-destructive`,children:a}),d.length>1&&(0,G.jsx)(Re,{nodes:d,edges:f,className:`h-[320px]`}),u.some(e=>e.evidence?.length)&&(0,G.jsx)(`div`,{className:`grid gap-1 border-t border-border/70 bg-card/35 px-3 py-2`,children:u.filter(e=>e.evidence?.length).slice(0,12).map(e=>{let t=(e.from===l?e.to:e.from).slice(4);return(0,G.jsxs)(`p`,{className:`truncate font-mono text-[9px] text-muted-foreground`,children:[(0,G.jsx)(`span`,{className:`text-info`,children:e.relation}),` `,q(t),` · why:`,` `,e.evidence?.join(`, `)]},e.id)})}),s&&(0,G.jsx)(me,{open:s,onOpenChange:c,children:(0,G.jsxs)(F,{className:`flex max-h-[90dvh] max-w-[90vw] flex-col p-0`,showCloseButton:!1,children:[(0,G.jsxs)(`div`,{className:`flex items-center justify-between border-b border-border/70 bg-card/55 px-4 py-3`,children:[(0,G.jsx)(`p`,{className:`text-[10px] font-bold uppercase tracking-[0.16em] text-muted-foreground`,children:o(`activity:memoryManager.graphHeadingFull`,{id:e.id})}),(0,G.jsx)(L,{variant:`ghost`,size:`sm`,onClick:()=>c(!1),className:`h-7 gap-1 px-2 text-[10px]`,children:o(`common:action.close`)})]}),(0,G.jsx)(`div`,{className:`min-h-0 flex-1 px-4 pb-4`,children:(0,G.jsx)(Re,{nodes:d,edges:f,className:`h-[65vh]`})})]})})]})}function ze({memory:e,allMemories:n,relatedMemories:a,graphEdges:o,graphLoading:s,graphError:c,onClose:l,onOpenMemory:u,onEdit:d,onDelete:f,onTagSelect:p,onNotice:m}){let{t:h}=t();return(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 border-b border-border/70 bg-card/65 px-4 py-3 backdrop-blur-xl`,children:[(0,G.jsx)(L,{variant:`ghost`,size:`icon`,className:`md:hidden`,onClick:l,"aria-label":h(`activity:memoryManager.backToList`),children:(0,G.jsx)(r,{className:`size-4`})}),(0,G.jsx)(`span`,{className:N(`text-[10px] font-bold uppercase tracking-[0.14em]`,xe(e.kind)),children:H[e.kind]??e.kind}),(0,G.jsx)(Ce,{status:e.status}),(0,G.jsx)(`span`,{className:`border border-border/70 px-2 py-0.5 font-mono text-[9px] uppercase text-muted-foreground`,children:e.scope}),e.audience&&(0,G.jsxs)(`span`,{className:`flex items-center gap-1 border border-primary/30 bg-primary/10 px-2 py-0.5 font-mono text-[9px] text-primary`,title:De(e.audience),children:[(0,G.jsx)(b,{className:`size-3`}),De(e.audience)]}),(0,G.jsxs)(`div`,{className:`ml-auto flex items-center gap-1.5`,children:[(0,G.jsx)(L,{variant:`ghost`,size:`icon`,"aria-label":h(`activity:memoryManager.copyId`),title:h(`activity:memoryManager.copyId`),onClick:()=>{navigator.clipboard?.writeText(e.id),m(h(`activity:memoryManager.copiedNotice`))},children:(0,G.jsx)(i,{className:`size-4`})}),(0,G.jsxs)(L,{variant:`outline`,size:`sm`,onClick:()=>d(e.id),disabled:e.status===`deleted`,children:[(0,G.jsx)(ne,{className:`size-3.5`}),` `,h(`common:action.edit`)]}),(0,G.jsxs)(L,{variant:`destructive`,size:`sm`,onClick:f,disabled:e.status===`deleted`,children:[(0,G.jsx)(T,{className:`size-3.5`}),` `,h(`common:action.delete`)]})]})]}),(0,G.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto overscroll-contain p-4 md:p-5`,children:(0,G.jsxs)(`div`,{className:`mx-auto max-w-5xl space-y-5`,children:[(0,G.jsx)(Be,{memory:e}),(0,G.jsx)($,{memory:e}),e.tags.length>0&&(0,G.jsx)(Ve,{tags:e.tags,onTagSelect:p}),e.anchors.length>0&&(0,G.jsx)(He,{anchors:e.anchors}),a.length>0&&(0,G.jsx)(Ue,{relatedMemories:a,allMemories:n,onOpenMemory:u}),(0,G.jsx)(Q,{centerMemory:e,allMemories:n,graphEdges:o,loading:s,error:c}),(0,G.jsx)(We,{memory:e}),e.status===`deleted`&&(0,G.jsx)(Ge,{contextPolicy:e.contextPolicy})]})})]})}function Be({memory:e}){let{t:n}=t();return(0,G.jsxs)(`div`,{className:`relative overflow-hidden border border-border/75 bg-card/55 p-5 shadow-[inset_0_1px_0_hsl(var(--foreground)/0.04)]`,children:[(0,G.jsx)(`div`,{className:`pointer-events-none absolute -right-10 -top-10 size-36 bg-[radial-gradient(circle,hsl(var(--info)/0.13),transparent_68%)]`}),(0,G.jsx)(`p`,{className:`relative whitespace-pre-wrap text-sm leading-7 text-foreground md:text-[15px]`,children:e.text}),e.summary&&(0,G.jsx)(`p`,{className:`relative mt-4 border-l-2 border-info/50 pl-3 text-xs italic leading-5 text-muted-foreground`,children:e.summary}),(0,G.jsxs)(`div`,{className:`relative mt-5 flex flex-wrap items-center gap-2 border-t border-border/60 pt-3`,children:[(0,G.jsx)(`code`,{className:`min-w-0 break-all font-mono text-[10px] text-muted-foreground`,children:e.id}),(0,G.jsx)(`span`,{className:`ml-auto font-mono text-[10px] text-muted-foreground`,children:n(`activity:memoryManager.revisionSuffix`,{n:e.revision})})]})]})}function $({memory:e}){let{t:n}=t(),r=[[n(`activity:memoryManager.editorImportance`),e.importance,g],[n(`activity:memoryManager.editorConfidence`),e.confidence,se],[n(`activity:memoryManager.editorFreshness`),e.freshness,M]];return(0,G.jsx)(`div`,{className:`grid gap-px bg-border/60 sm:grid-cols-3`,children:r.map(([e,t,n])=>(0,G.jsxs)(`div`,{className:`bg-card/60 p-3`,children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,G.jsx)(n,{className:`size-3.5 text-info`}),(0,G.jsx)(`span`,{className:`text-[10px] font-bold uppercase tracking-[0.13em] text-muted-foreground`,children:e}),(0,G.jsxs)(`span`,{className:`ml-auto font-mono text-xs font-bold tabular-nums`,children:[Math.round(t*100),`%`]})]}),(0,G.jsx)(`div`,{className:`mt-2 h-1 bg-muted`,children:(0,G.jsx)(`div`,{className:`h-full bg-info shadow-[0_0_8px_hsl(var(--info)/0.45)]`,style:{width:`${Math.round(t*100)}%`}})})]},e))})}function Ve({tags:e,onTagSelect:n}){let{t:r}=t();return(0,G.jsxs)(`section`,{children:[(0,G.jsxs)(`h3`,{className:`mb-2 flex items-center gap-2 text-[10px] font-bold uppercase tracking-[0.14em] text-muted-foreground`,children:[(0,G.jsx)(a,{className:`size-3.5 text-info`}),` `,r(`activity:memoryManager.tagsLabel`)]}),(0,G.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:e.map(e=>(0,G.jsxs)(`button`,{type:`button`,onClick:()=>n(e),className:`border border-info/25 bg-info/5 px-2 py-1 font-mono text-[10px] text-info hover:border-info/55 hover:bg-info/10`,children:[`#`,e]},e))})]})}function He({anchors:e}){let{t:n}=t();return(0,G.jsxs)(`section`,{className:`border border-border/75 bg-card/40`,children:[(0,G.jsxs)(`div`,{className:`flex items-center justify-between border-b border-border/65 px-3 py-2.5`,children:[(0,G.jsxs)(`h3`,{className:`flex items-center gap-2 text-[10px] font-bold uppercase tracking-[0.14em] text-muted-foreground`,children:[(0,G.jsx)(E,{className:`size-3.5 text-info`}),` `,n(`activity:memoryManager.editorAnchors`)]}),(0,G.jsx)(`span`,{className:`font-mono text-[10px] text-muted-foreground`,children:e.length})]}),(0,G.jsx)(`ul`,{className:`divide-y divide-border/55`,children:e.map((e,t)=>(0,G.jsxs)(`li`,{className:`flex min-w-0 items-start gap-3 px-3 py-2.5`,children:[(0,G.jsx)(`span`,{className:`mt-0.5 flex size-7 shrink-0 items-center justify-center border border-info/25 bg-info/5 text-info`,children:e.type===`command`?(0,G.jsx)(m,{className:`size-3.5`}):(0,G.jsx)(E,{className:`size-3.5`})}),(0,G.jsxs)(`div`,{className:`min-w-0`,children:[(0,G.jsx)(`p`,{className:`text-[9px] font-bold uppercase text-muted-foreground`,children:e.type}),(0,G.jsxs)(`p`,{className:`mt-0.5 break-all font-mono text-[10px] leading-4 text-foreground/85`,children:[e.path??e.command??e.role??`—`,e.symbol?`#${e.symbol}`:``]})]}),(e.lineStart||e.lineEnd)&&(0,G.jsxs)(`span`,{className:`ml-auto shrink-0 font-mono text-[9px] text-muted-foreground`,children:[`L`,e.lineStart??`?`,`–`,e.lineEnd??`?`]})]},`${e.type}:${e.path??e.command??e.symbol??e.role}:${t}`))})]})}function Ue({relatedMemories:e,allMemories:n,onOpenMemory:r}){let{t:i}=t();return(0,G.jsxs)(`section`,{className:`border border-border/75 bg-card/40`,children:[(0,G.jsxs)(`div`,{className:`flex items-center justify-between border-b border-border/65 px-3 py-2.5`,children:[(0,G.jsxs)(`h3`,{className:`flex items-center gap-2 text-[10px] font-bold uppercase tracking-[0.14em] text-muted-foreground`,children:[(0,G.jsx)(d,{className:`size-3.5 text-info`}),` `,i(`activity:memoryManager.memoryRelationships`)]}),(0,G.jsx)(`span`,{className:`font-mono text-[10px] text-muted-foreground`,children:e.length})]}),(0,G.jsx)(`ul`,{className:`divide-y divide-border/55`,children:e.map(e=>{let t=n.find(t=>t.id===e.id);return(0,G.jsx)(`li`,{children:(0,G.jsxs)(`button`,{type:`button`,disabled:!t,onClick:()=>t&&r(t.id),className:`group flex w-full min-w-0 items-center gap-3 px-3 py-2.5 text-left hover:bg-info/5 disabled:cursor-not-allowed disabled:opacity-55`,children:[(0,G.jsx)(`span`,{className:N(`w-24 shrink-0 text-[9px] font-bold uppercase`,e.relation===`Contradicts`?`text-destructive`:`text-info`),children:e.relation}),(0,G.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-xs`,children:t?V(t.text,95):i(`activity:memoryManager.referencedUnavailable`)}),(0,G.jsx)(`code`,{className:`hidden max-w-32 truncate font-mono text-[9px] text-muted-foreground sm:block`,children:e.id}),t&&(0,G.jsx)(x,{className:`size-3.5 shrink-0 text-muted-foreground group-hover:text-info`})]})},`${e.relation}:${e.id}`)})})]})}function We({memory:e}){let{t:n}=t(),r=[[n(`activity:memoryManager.metaCreated`),we(e.createdAt),v],[n(`activity:memoryManager.metaUpdated`),we(e.updatedAt),M],[n(`activity:memoryManager.metaLastAccessed`),we(e.lastAccessedAt),p],[n(`activity:memoryManager.metaLastVerified`),we(e.lastVerifiedAt),g]];return(0,G.jsx)(`section`,{className:`grid gap-px bg-border/60 sm:grid-cols-2 lg:grid-cols-4`,children:r.map(([e,t,n])=>(0,G.jsxs)(`div`,{className:`bg-card/50 p-3`,children:[(0,G.jsx)(n,{className:`size-3.5 text-muted-foreground`}),(0,G.jsx)(`p`,{className:`mt-2 text-[9px] font-bold uppercase tracking-[0.12em] text-muted-foreground`,children:e}),(0,G.jsx)(`p`,{className:`mt-1 text-[10px] leading-4 text-foreground/85`,children:t})]},e))})}function Ge({contextPolicy:e}){let{t:n}=t();return(0,G.jsxs)(`div`,{className:`flex items-start gap-3 border border-border bg-muted/50 p-4 text-xs text-muted-foreground`,children:[(0,G.jsx)(s,{className:`mt-0.5 size-4 shrink-0`}),(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`p`,{className:`font-bold text-foreground`,children:n(`activity:memoryManager.deletedMemory`)}),(0,G.jsx)(`p`,{className:`mt-1 leading-5`,children:n(e===`never`?`activity:memoryManager.deletedNeverPolicy`:`activity:memoryManager.deletedEligiblePolicy`)})]})]})}function Ke({currentFilePath:e,knownFilePaths:n,drawerActive:r,onFilePathChange:i,onToggleDrawer:a}){let{t:o}=t();return(0,G.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 border-b border-border/60 bg-card/30 px-3 py-1.5`,children:[(0,G.jsx)(`span`,{className:`text-[10px] uppercase tracking-wide text-muted-foreground`,children:o(`activity:memoryManager.fileDrawerLabel`)}),(0,G.jsx)(`input`,{type:`text`,list:`memory-drawer-file-list`,value:e??``,onChange:e=>{i(e.target.value.trim()||null)},placeholder:o(`activity:memoryManager.selectFilePlaceholder`),className:`min-w-0 max-w-[260px] flex-1 truncate rounded-sm border border-border/60 bg-background px-1.5 py-0.5 text-[10px] font-mono`,"aria-label":o(`activity:memoryManager.fileForDrawerAria`),"data-testid":`memory-drawer-file-select`}),(0,G.jsx)(`datalist`,{id:`memory-drawer-file-list`,children:[...n].sort().map(e=>(0,G.jsx)(`option`,{value:e},e))}),(0,G.jsxs)(L,{type:`button`,size:`sm`,variant:r?`default`:`outline`,onClick:a,disabled:!e,className:`h-7 shrink-0 gap-1 px-2 text-[11px]`,"aria-pressed":r,title:o(r?`activity:memoryManager.hideFileDrawer`:`activity:memoryManager.showFileDrawer`),children:[r?(0,G.jsx)(u,{className:`size-3`}):(0,G.jsx)(c,{className:`size-3`}),o(r?`activity:memoryManager.hideDrawer`:`activity:memoryManager.showDrawer`)]})]})}function qe({mode:e,draft:n,busy:r,error:i,onChange:a,onCancel:o,onSubmit:s}){let{t:c}=t(),u=(0,K.useRef)(null),[d,p]=(0,K.useState)([]);(0,K.useEffect)(()=>{u.current?.focus();let e=new AbortController;return he(`agent-roster.list`,{},e.signal).then(e=>{let t=e.roles;Array.isArray(t)&&p(t.filter(e=>typeof e==`string`))}).catch(()=>void 0),()=>e.abort()},[]);let m=(e,t)=>{a({...n,[e]:t})},g=()=>{m(`anchors`,[...n.anchors,{type:`file`,path:``}])};return(0,G.jsxs)(`form`,{className:`flex min-h-0 flex-1 flex-col`,onSubmit:e=>{e.preventDefault(),s()},"aria-busy":r,children:[(0,G.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 border-b border-border/70 bg-card/70 px-4 py-3 backdrop-blur-xl`,children:[(0,G.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,G.jsx)(`span`,{className:`flex size-8 items-center justify-center border border-info/35 bg-info/10 text-info`,children:e===`create`?(0,G.jsx)(h,{className:`size-4`}):(0,G.jsx)(ne,{className:`size-4`})}),(0,G.jsxs)(`div`,{className:`min-w-0`,children:[(0,G.jsx)(`p`,{className:`truncate text-sm font-bold`,children:c(e===`create`?`activity:memoryManager.captureMemory`:`activity:memoryManager.editMemory`)}),(0,G.jsx)(`p`,{className:`text-[10px] text-muted-foreground`,children:c(e===`create`?`activity:memoryManager.editorCreateHint`:`activity:memoryManager.editorEditHint`)})]})]}),(0,G.jsxs)(`div`,{className:`ml-auto flex items-center gap-2`,children:[(0,G.jsxs)(L,{type:`button`,variant:`ghost`,size:`sm`,onClick:o,disabled:r,children:[(0,G.jsx)(te,{className:`size-3.5`}),` `,c(`common:action.cancel`)]}),(0,G.jsxs)(L,{type:`submit`,size:`sm`,disabled:r||!n.text.trim(),children:[r?(0,G.jsx)(D,{className:`size-3.5 animate-spin`}):e===`create`?(0,G.jsx)(f,{className:`size-3.5`}):(0,G.jsx)(A,{className:`size-3.5`}),c(r?`common:action.saving`:e===`create`?`activity:memoryManager.createMemory`:`activity:memoryManager.saveChanges`)]})]})]}),(0,G.jsx)(`div`,{className:`flex-1 min-h-0 overflow-y-auto overscroll-contain p-4 md:p-5`,children:(0,G.jsxs)(`div`,{className:`mx-auto max-w-4xl space-y-5`,children:[i&&(0,G.jsxs)(`div`,{role:`alert`,className:`flex items-start gap-2 border border-destructive/40 bg-destructive/10 px-3 py-2.5 text-sm text-destructive`,children:[(0,G.jsx)(l,{className:`mt-0.5 size-4 shrink-0`}),(0,G.jsx)(`span`,{children:i})]}),(0,G.jsxs)(`section`,{className:`border border-border/75 bg-card/45 p-4`,children:[(0,G.jsxs)(`div`,{className:`mb-3 flex items-center justify-between gap-3`,children:[(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`h3`,{className:`text-xs font-bold uppercase tracking-[0.14em]`,children:c(`activity:memoryManager.editorKnowledge`)}),(0,G.jsx)(`p`,{className:`mt-1 text-[10px] text-muted-foreground`,children:c(`activity:memEditor.writeTheDurableFactOrDecision`)})]}),(0,G.jsx)(`span`,{className:`font-mono text-[10px] text-muted-foreground tabular-nums`,children:c(`activity:memoryManager.editorCharCount`,{count:n.text.length})})]}),(0,G.jsx)(`label`,{htmlFor:`memory-text`,className:`sr-only`,children:c(`activity:memoryManager.editorContentLabel`)}),(0,G.jsx)(`textarea`,{ref:u,id:`memory-text`,value:n.text,onChange:e=>m(`text`,e.target.value),rows:7,required:!0,placeholder:c(`activity:memoryManager.editorContentPlaceholder`),className:`min-h-36 w-full resize-y border border-input bg-background/75 px-3 py-3 text-sm leading-6 text-foreground shadow-inner placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring`})]}),(0,G.jsxs)(`section`,{className:`grid gap-3 sm:grid-cols-2 lg:grid-cols-3`,children:[(0,G.jsxs)(`div`,{className:`min-w-0`,children:[(0,G.jsx)(`label`,{htmlFor:`memory-kind`,className:`mb-1.5 block text-[10px] font-bold uppercase tracking-[0.14em] text-muted-foreground`,children:c(`activity:memoryManager.editorKind`)}),(0,G.jsx)(`select`,{id:`memory-kind`,value:n.kind,onChange:e=>m(`kind`,e.target.value),className:`h-10 w-full border border-input bg-background px-3 text-sm`,children:Se.map(e=>(0,G.jsx)(`option`,{value:e,children:H[e]},e))})]}),e===`create`?(0,G.jsxs)(`div`,{className:`min-w-0`,children:[(0,G.jsx)(`label`,{htmlFor:`memory-scope`,className:`mb-1.5 block text-[10px] font-bold uppercase tracking-[0.14em] text-muted-foreground`,children:c(`activity:memoryManager.editorScope`)}),(0,G.jsx)(`select`,{id:`memory-scope`,value:n.scope,onChange:e=>m(`scope`,e.target.value),className:`h-10 w-full border border-input bg-background px-3 text-sm`,children:_e.map(e=>(0,G.jsx)(`option`,{value:e,children:e},e))})]}):(0,G.jsxs)(`div`,{className:`min-w-0`,children:[(0,G.jsx)(`label`,{htmlFor:`memory-status`,className:`mb-1.5 block text-[10px] font-bold uppercase tracking-[0.14em] text-muted-foreground`,children:c(`activity:memoryManager.editorLifecycleStatus`)}),(0,G.jsx)(`select`,{id:`memory-status`,value:n.status,onChange:e=>m(`status`,e.target.value),className:`h-10 w-full border border-input bg-background px-3 text-sm`,children:Te.map(e=>(0,G.jsx)(`option`,{value:e,children:e},e))})]}),(0,G.jsxs)(`div`,{className:N(`min-w-0`,e===`create`?`sm:col-span-2 lg:col-span-1`:``),children:[(0,G.jsx)(`label`,{htmlFor:`memory-tags`,className:`mb-1.5 block text-[10px] font-bold uppercase tracking-[0.14em] text-muted-foreground`,children:c(`activity:memoryManager.tagsLabel`)}),(0,G.jsx)(R,{id:`memory-tags`,value:n.tags,onChange:e=>m(`tags`,e.target.value),placeholder:c(`activity:memEditor.architectureWebuiWorkflow`),className:`h-10 bg-background`})]})]}),(0,G.jsxs)(`section`,{className:`grid gap-3 sm:grid-cols-3`,children:[(0,G.jsx)(B,{id:`memory-importance`,label:c(`activity:memoryManager.editorImportance`),value:n.importance,onChange:e=>m(`importance`,e)}),(0,G.jsx)(B,{id:`memory-confidence`,label:c(`activity:memoryManager.editorConfidence`),value:n.confidence,onChange:e=>m(`confidence`,e)}),(0,G.jsx)(B,{id:`memory-freshness`,label:c(`activity:memoryManager.editorFreshness`),value:n.freshness,onChange:e=>m(`freshness`,e)})]}),(0,G.jsxs)(`section`,{className:`border border-border/75 bg-card/45 p-4`,children:[(0,G.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`h3`,{className:`text-xs font-bold uppercase tracking-[0.14em]`,children:c(`activity:memoryManager.editorAnchors`)}),(0,G.jsx)(`p`,{className:`mt-1 text-[10px] text-muted-foreground`,children:c(`activity:memEditor.bindKnowledgeToFilesSymbolsPackages`)})]}),(0,G.jsxs)(L,{type:`button`,variant:`outline`,size:`sm`,onClick:g,children:[(0,G.jsx)(f,{className:`size-3.5`}),` `,c(`activity:memoryManager.addAnchor`)]})]}),n.anchors.length===0?(0,G.jsxs)(`button`,{type:`button`,onClick:g,className:`mt-4 flex w-full items-center justify-center gap-2 border border-dashed border-border px-4 py-7 text-xs text-muted-foreground transition-colors hover:border-info/50 hover:bg-info/5 hover:text-info`,children:[(0,G.jsx)(oe,{className:`size-4`}),` `,c(`activity:memoryManager.noAnchors`)]}):(0,G.jsx)(`div`,{className:`mt-4 space-y-2`,children:n.anchors.map((e,t)=>(0,G.jsxs)(`div`,{className:`grid gap-2 border border-border/65 bg-background/40 p-2 sm:grid-cols-[9rem_minmax(0,1fr)_auto]`,children:[(0,G.jsxs)(`label`,{className:`sr-only`,htmlFor:`anchor-type-${t}`,children:[`Anchor `,t+1,` type`]}),(0,G.jsx)(`select`,{id:`anchor-type-${t}`,value:e.type,onChange:e=>{let r=e.target.value,i=r===`command`?{type:r,command:``}:r===`agent`?{type:r,role:``}:{type:r,path:``},a=n.anchors.map((e,n)=>n===t?i:e);m(`anchors`,a)},className:`h-10 border border-input bg-background px-2 text-xs`,children:Oe.map(e=>(0,G.jsx)(`option`,{value:e,children:e},e))}),(0,G.jsxs)(`div`,{className:N(`grid min-w-0 gap-2`,e.type===`symbol`&&`sm:grid-cols-[minmax(0,1fr)_11rem]`),children:[(0,G.jsxs)(`label`,{className:`sr-only`,htmlFor:`anchor-value-${t}`,children:[`Anchor `,t+1,` value`]}),(0,G.jsx)(R,{id:`anchor-value-${t}`,list:e.type===`agent`?`memory-agent-role-options`:void 0,value:ke(e),onChange:e=>{let r=n.anchors.map((n,r)=>r===t?ve(n,e.target.value):n);m(`anchors`,r)},placeholder:e.type===`command`?`pnpm test --filter webui`:e.type===`agent`?`reviewer`:`packages/webui/src/App.tsx`,className:`h-10 min-w-0 bg-background font-mono text-xs`}),e.type===`symbol`&&(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(`label`,{className:`sr-only`,htmlFor:`anchor-symbol-${t}`,children:[`Anchor `,t+1,` symbol`]}),(0,G.jsx)(R,{id:`anchor-symbol-${t}`,value:e.symbol??``,onChange:e=>{let r=n.anchors.map((n,r)=>r===t?{...n,symbol:e.target.value}:n);m(`anchors`,r)},placeholder:c(`activity:memoryManager.editorSymbolPlaceholder`),className:`h-10 bg-background font-mono text-xs`})]})]}),(0,G.jsx)(L,{type:`button`,variant:`ghost`,size:`icon`,"aria-label":`Remove anchor ${t+1}`,onClick:()=>m(`anchors`,n.anchors.filter((e,n)=>n!==t)),children:(0,G.jsx)(T,{className:`size-4 text-destructive`})})]},`${e.type}:${t}`))}),(0,G.jsx)(`datalist`,{id:`memory-agent-role-options`,children:d.map(e=>(0,G.jsx)(`option`,{value:e},e))})]}),(0,G.jsxs)(`section`,{className:`grid gap-3 border border-border/75 bg-card/45 p-4 sm:grid-cols-2`,children:[(0,G.jsxs)(`div`,{className:`sm:col-span-2`,children:[(0,G.jsx)(`h3`,{className:`text-xs font-bold uppercase tracking-[0.14em]`,children:c(`activity:memoryManager.editorRelationships`)}),(0,G.jsx)(`p`,{className:`mt-1 text-[10px] text-muted-foreground`,children:c(`activity:memoryManager.editorRelationshipsHint`)})]}),(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`label`,{htmlFor:`memory-supersedes`,className:`mb-1.5 block text-[10px] font-bold uppercase tracking-[0.14em] text-muted-foreground`,children:c(`activity:memoryManager.editorSupersedes`)}),(0,G.jsx)(R,{id:`memory-supersedes`,value:n.supersedes,onChange:e=>m(`supersedes`,e.target.value),placeholder:c(`activity:memEditor.memIdMemId`),className:`h-10 bg-background font-mono text-xs`})]}),(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`label`,{htmlFor:`memory-contradicts`,className:`mb-1.5 block text-[10px] font-bold uppercase tracking-[0.14em] text-muted-foreground`,children:c(`activity:memoryManager.editorContradicts`)}),(0,G.jsx)(R,{id:`memory-contradicts`,value:n.contradicts,onChange:e=>m(`contradicts`,e.target.value),placeholder:c(`activity:memEditor.memIdMemId`),className:`h-10 bg-background font-mono text-xs`})]})]}),(0,G.jsxs)(`section`,{className:`space-y-2`,children:[(0,G.jsx)(`h3`,{className:`text-[10px] font-bold uppercase tracking-[0.14em] text-muted-foreground`,children:c(`activity:memEditor.audienceOptional`)}),(0,G.jsx)(`p`,{className:`text-[10px] text-muted-foreground/70`,children:c(`activity:memEditor.targetThisMemoryToSpecificAgent`)}),(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`label`,{htmlFor:`memory-audience-roles`,className:`mb-1.5 block text-[10px] font-bold uppercase tracking-[0.14em] text-muted-foreground`,children:c(`activity:memEditor.roles`)}),(0,G.jsx)(R,{id:`memory-audience-roles`,value:n.audienceRoles,onChange:e=>m(`audienceRoles`,e.target.value),placeholder:c(`activity:memEditor.reviewerRefactorPlanner`),className:`h-9 bg-background font-mono text-xs`})]}),(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`label`,{htmlFor:`memory-audience-task-types`,className:`mb-1.5 block text-[10px] font-bold uppercase tracking-[0.14em] text-muted-foreground`,children:c(`activity:memoryManager.editorTaskTypes`)}),(0,G.jsx)(R,{id:`memory-audience-task-types`,value:n.audienceTaskTypes,onChange:e=>m(`audienceTaskTypes`,e.target.value),placeholder:c(`activity:memEditor.reviewRefactorBugfix`),className:`h-9 bg-background font-mono text-xs`})]}),(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`label`,{htmlFor:`memory-audience-modes`,className:`mb-1.5 block text-[10px] font-bold uppercase tracking-[0.14em] text-muted-foreground`,children:c(`activity:memEditor.modes`)}),(0,G.jsx)(R,{id:`memory-audience-modes`,value:n.audienceModes,onChange:e=>m(`audienceModes`,e.target.value),placeholder:c(`activity:memEditor.teachCodeReview`),className:`h-9 bg-background font-mono text-xs`})]})]})]})})]})}function Je({searchQuery:e,statusFilter:r,kindFilter:i,audienceOnly:o,tagFilter:s,hasFilters:c,allTags:l,stats:u,onSearchChange:d,onStatusFilterChange:f,onKindFilterChange:p,onToggleAudienceOnly:m,onTagFilterChange:h,onClearFilters:g}){let{t:_}=t(),[v,y]=(0,K.useState)(!!s),x=v||!!s,S=l.length>0;return(0,G.jsxs)(`div`,{className:`shrink-0 space-y-2 overflow-hidden border-b border-border/70 bg-card/45 p-3`,children:[(0,G.jsxs)(`div`,{className:`flex gap-2`,children:[(0,G.jsxs)(`div`,{className:`relative min-w-0 flex-1`,children:[(0,G.jsx)(ee,{className:`pointer-events-none absolute left-3 top-1/2 size-3.5 -translate-y-1/2 text-muted-foreground`}),(0,G.jsx)(R,{"aria-label":_(`activity:memoryManager.searchAria`),value:e,onChange:e=>d(e.target.value),placeholder:_(`activity:memoryManager.searchPlaceholder`),className:`h-10 min-w-0 bg-background pl-9 pr-8 text-xs`}),e&&(0,G.jsx)(`button`,{type:`button`,"aria-label":_(`activity:memoryManager.clearSearchAria`),onClick:()=>d(``),className:`absolute right-2 top-1/2 -translate-y-1/2 p-1 text-muted-foreground hover:text-foreground`,children:(0,G.jsx)(te,{className:`size-3.5`})})]}),(0,G.jsx)(L,{variant:o?`default`:`ghost`,size:`icon`,onClick:m,"aria-label":_(`activity:memoryManager.audienceFilterAria`),title:_(`activity:memoryManager.audienceFilterTitle`),className:`shrink-0`,children:(0,G.jsx)(b,{className:`size-4`})}),c&&(0,G.jsx)(L,{variant:`ghost`,size:`icon`,onClick:g,"aria-label":_(`activity:memoryManager.clearFiltersAria`),title:_(`activity:memoryManager.clearFiltersTitle`),children:(0,G.jsx)(n,{className:`size-4`})})]}),(0,G.jsxs)(`div`,{className:`grid grid-cols-2 gap-2`,children:[(0,G.jsx)(`label`,{className:`sr-only`,htmlFor:`memory-status-filter`,children:_(`activity:memoryManager.filterByStatus`)}),(0,G.jsxs)(`select`,{id:`memory-status-filter`,value:r,onChange:e=>f(e.target.value),className:`h-9 min-w-0 border border-input bg-background px-2 text-xs`,children:[(0,G.jsx)(`option`,{value:`all`,children:_(`activity:memoryManager.allStatuses`)}),Ee.map(e=>(0,G.jsxs)(`option`,{value:e,children:[e,` · `,u?.byStatus[e]??0]},e))]}),(0,G.jsx)(`label`,{className:`sr-only`,htmlFor:`memory-kind-filter`,children:_(`activity:memoryManager.filterByKind`)}),(0,G.jsxs)(`select`,{id:`memory-kind-filter`,value:i,onChange:e=>p(e.target.value),className:`h-9 min-w-0 border border-input bg-background px-2 text-xs`,children:[(0,G.jsx)(`option`,{value:`all`,children:_(`activity:memoryManager.allKinds`)}),Se.map(e=>(0,G.jsxs)(`option`,{value:e,children:[H[e],` · `,u?.byKind[e]??0]},e))]})]}),S&&(0,G.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,G.jsxs)(`button`,{type:`button`,onClick:()=>{s||y(e=>!e)},"aria-expanded":x,"aria-controls":`memory-tags-panel`,disabled:!!s,className:N(`flex items-center gap-1.5 px-1 py-0.5 text-[10px] uppercase tracking-wide transition-colors`,x?`text-foreground`:`text-muted-foreground hover:text-foreground`,!!s&&`cursor-default`),title:s?`Active filter: ${s} (click the chip to clear)`:x?`Hide tag filters`:`Show tag filters (${l.length})`,children:[(0,G.jsx)(ae,{className:N(`size-3 transition-transform`,!x&&`-rotate-90`)}),(0,G.jsx)(a,{className:`size-3`}),(0,G.jsx)(`span`,{className:`font-semibold`,children:_(`activity:memoryManager.tagsLabel`)}),(0,G.jsx)(`span`,{className:`font-mono text-[9px] text-muted-foreground`,children:l.length})]}),s&&(0,G.jsx)(`span`,{role:`status`,"aria-label":`Active tag filter: ${s}`,className:`border border-info/55 bg-info/10 px-1 font-mono text-[9px] uppercase text-info`,children:s})]}),S&&x&&(0,G.jsxs)(`fieldset`,{id:`memory-tags-panel`,className:`min-w-0 border-0 p-0`,children:[(0,G.jsx)(`legend`,{className:`sr-only`,children:_(`activity:memoryManager.popularTags`)}),(0,G.jsx)(`div`,{className:`no-scrollbar flex gap-1.5 overflow-x-auto pb-0.5`,children:l.slice(0,18).map(([e,t])=>(0,G.jsxs)(`button`,{type:`button`,"aria-pressed":s===e,onClick:()=>h(s===e?null:e),className:N(`flex shrink-0 items-center gap-1 border px-2 py-1 text-[10px] transition-colors`,s===e?`border-info/55 bg-info/10 text-info`:`border-border/70 bg-background/45 text-muted-foreground hover:border-info/35 hover:text-foreground`),children:[(0,G.jsx)(a,{className:`size-2.5`}),` `,e,(0,G.jsx)(`span`,{className:`font-mono opacity-60`,children:t})]},e))})]})]})}var Ye=100;function Xe({memoryListRef:e,memories:n,filteredMemories:r,selectedId:i,onSelectMemory:a,onOpenCreate:o,onClearFilters:s}){let{t:c}=t(),l=r.length>Ye,u=ie({count:r.length,getScrollElement:()=>e.current,estimateSize:()=>100,overscan:8,enabled:l});return(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between border-b border-border/60 px-3 py-2 text-[10px] text-muted-foreground`,children:[(0,G.jsx)(`span`,{children:c(`activity:memoryManager.memoryCountSummary`,{shown:r.length,total:n.length})}),(0,G.jsx)(`span`,{className:`font-mono uppercase`,children:c(`activity:memoryManager.updatedSortLabel`)})]}),(0,G.jsx)(`section`,{ref:e,className:`min-h-0 flex-1 overflow-y-auto overscroll-contain`,"aria-label":c(`activity:memoryManager.listAria`),children:r.length===0?(0,G.jsx)(Ze,{hasMemories:n.length>0,onOpenCreate:o,onClearFilters:s}):l?(0,G.jsx)(`div`,{style:{height:`${u.getTotalSize()}px`,width:`100%`,position:`relative`},children:u.getVirtualItems().map(e=>{let t=r[e.index];return t?(0,G.jsx)(`div`,{"data-index":e.index,ref:u.measureElement,style:{position:`absolute`,top:0,left:0,width:`100%`,transform:`translateY(${e.start}px)`},children:(0,G.jsx)(Qe,{memory:t,isSelected:i===t.id,onClick:()=>a(t.id)})},t.id):null})}):r.map(e=>(0,G.jsx)(Qe,{memory:e,isSelected:i===e.id,onClick:()=>a(e.id)},e.id))})]})}function Ze({hasMemories:e,onOpenCreate:r,onClearFilters:i}){let{t:a}=t();return(0,G.jsxs)(`div`,{className:`flex min-h-64 flex-col items-center justify-center px-6 text-center`,children:[(0,G.jsx)(`span`,{className:`flex size-12 items-center justify-center border border-dashed border-border text-muted-foreground`,children:(0,G.jsx)(j,{className:`size-5`})}),(0,G.jsx)(`h2`,{className:`mt-4 text-sm font-bold`,children:a(e?`activity:memoryManager.noMatching`:`activity:memoryManager.buildGraph`)}),(0,G.jsx)(`p`,{className:`mt-1 max-w-xs text-xs leading-5 text-muted-foreground`,children:a(e?`activity:memoryManager.emptyFiltered`:`activity:memoryManager.emptyCapture`)}),(0,G.jsxs)(L,{className:`mt-4`,variant:`outline`,size:`sm`,onClick:e?i:r,children:[e?(0,G.jsx)(n,{className:`size-3.5`}):(0,G.jsx)(f,{className:`size-3.5`}),a(e?`activity:memoryManager.clearFilters`:`activity:memoryManager.createFirst`)]})]})}function Qe({memory:e,isSelected:t,onClick:n}){return(0,G.jsxs)(`button`,{type:`button`,"aria-current":t?`true`:void 0,onClick:n,className:N(`group relative block w-full border-b border-border/55 px-3 py-3 text-left transition-[background-color,border-color] hover:bg-info/5`,t&&`bg-info/8`),children:[t&&(0,G.jsx)(`span`,{className:`absolute inset-y-0 left-0 w-0.5 bg-info shadow-[0_0_10px_hsl(var(--info)/0.7)]`}),(0,G.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,G.jsx)(`span`,{className:N(`truncate text-[10px] font-bold uppercase tracking-[0.1em]`,xe(e.kind)),children:H[e.kind]??e.kind}),(0,G.jsx)(Ce,{status:e.status}),(0,G.jsxs)(`span`,{className:`ml-auto shrink-0 font-mono text-[9px] text-muted-foreground`,children:[`r`,e.revision]})]}),(0,G.jsx)(`p`,{className:N(`mt-2 line-clamp-2 text-xs leading-5 text-foreground/90`,e.status===`deleted`&&`line-through opacity-60`),children:V(e.text)}),(0,G.jsxs)(`div`,{className:`mt-2 flex min-w-0 items-center gap-1.5`,children:[(0,G.jsx)(`span`,{className:`border border-border/60 bg-background/50 px-1.5 py-0.5 font-mono text-[9px] uppercase text-muted-foreground`,children:e.scope}),e.audience&&(0,G.jsxs)(`span`,{className:`flex items-center gap-0.5 border border-primary/30 bg-primary/10 px-1.5 py-0.5 font-mono text-[9px] text-primary`,children:[(0,G.jsx)(b,{className:`size-2.5`}),(e.audience.roles??e.audience.taskTypes??e.audience.modes??[]).slice(0,1)[0]??`scoped`]}),e.tags.slice(0,2).map(e=>(0,G.jsxs)(`span`,{className:`max-w-24 truncate border border-border/60 px-1.5 py-0.5 font-mono text-[9px] text-muted-foreground`,children:[`#`,e]},e)),e.tags.length>2&&(0,G.jsxs)(`span`,{className:`font-mono text-[9px] text-muted-foreground`,children:[`+`,e.tags.length-2]}),(0,G.jsx)(`span`,{className:`ml-auto shrink-0 text-[9px] text-muted-foreground`,children:Ae(e.updatedAt)}),(0,G.jsx)(x,{className:`size-3 shrink-0 text-muted-foreground transition-transform group-hover:translate-x-0.5 group-hover:text-info`})]})]})}function $e({onCapture:e}){let{t:n}=t();return(0,G.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col items-center justify-center p-8 text-center`,children:[(0,G.jsxs)(`div`,{className:`relative flex size-20 items-center justify-center border border-info/25 bg-info/5 text-info`,children:[(0,G.jsx)(b,{className:`size-8`}),(0,G.jsx)(`span`,{className:`absolute inset-2 border border-info/10`})]}),(0,G.jsx)(`h2`,{className:`mt-5 text-lg font-bold`,children:n(`activity:memoryManager.emptyTitle`)}),(0,G.jsx)(`p`,{className:`mt-2 max-w-md text-sm leading-6 text-muted-foreground`,children:n(`activity:memoryManager.emptyBody`)}),(0,G.jsxs)(`div`,{className:`mt-6 grid w-full max-w-lg gap-2 sm:grid-cols-3`,children:[(0,G.jsxs)(`div`,{className:`border border-border/70 bg-card/45 p-3`,children:[(0,G.jsx)(O,{className:`mx-auto size-4 text-success`}),(0,G.jsx)(`p`,{className:`mt-2 text-[10px] font-bold uppercase`,children:n(`activity:memoryManager.emptyVerifiedAnchors`)})]}),(0,G.jsxs)(`div`,{className:`border border-border/70 bg-card/45 p-3`,children:[(0,G.jsx)(b,{className:`mx-auto size-4 text-info`}),(0,G.jsx)(`p`,{className:`mt-2 text-[10px] font-bold uppercase`,children:n(`activity:memoryManager.emptyTypedRelations`)})]}),(0,G.jsxs)(`div`,{className:`border border-border/70 bg-card/45 p-3`,children:[(0,G.jsx)(f,{className:`mx-auto size-4 text-warning`}),(0,G.jsx)(`p`,{className:`mt-2 text-[10px] font-bold uppercase`,children:n(`activity:memoryManager.emptyAgentRecall`)})]})]}),(0,G.jsxs)(L,{onClick:e,children:[(0,G.jsx)(f,{className:`size-4`}),` `,n(`activity:memoryManager.captureButton`)]})]})}function et({wsConnected:e,refreshing:n,onRefresh:i,onCreate:a}){let{t:o}=t(),s=de(e=>e.setCurrentView);return(0,G.jsxs)(`header`,{className:`relative shrink-0 overflow-hidden border-b border-border/70 bg-card/72 px-4 py-3 backdrop-blur-xl sm:px-5`,children:[(0,G.jsx)(`div`,{className:`pointer-events-none absolute inset-y-0 right-0 w-1/2 bg-[radial-gradient(circle_at_right,hsl(var(--info)/0.11),transparent_68%)]`}),(0,G.jsxs)(`div`,{className:`relative flex flex-wrap items-center gap-3`,children:[(0,G.jsx)(L,{variant:`ghost`,size:`icon`,onClick:()=>s(`chat`),"aria-label":o(`activity:memoryManager.backToChat`),title:o(`activity:memoryManager.backToChat`),children:(0,G.jsx)(r,{className:`size-4`})}),(0,G.jsx)(`span`,{className:`flex size-10 items-center justify-center border border-info/40 bg-info/10 text-info shadow-[0_0_20px_hsl(var(--info)/0.12)]`,children:(0,G.jsx)(b,{className:`size-5`})}),(0,G.jsxs)(`div`,{className:`min-w-0`,children:[(0,G.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,G.jsx)(`h1`,{className:`text-base font-bold sm:text-lg`,children:o(`activity:memoryManager.sageHeading`)}),(0,G.jsx)(`span`,{className:`border border-success/35 bg-success/10 px-2 py-0.5 font-mono text-[9px] font-bold uppercase text-success`,children:o(`activity:memoryManager.projectKnowledge`)})]}),(0,G.jsx)(`p`,{className:`mt-0.5 max-w-2xl text-[10px] text-muted-foreground sm:text-xs`,children:o(`activity:memoryManager.sageSubtitle`)})]}),(0,G.jsxs)(`div`,{className:`ml-auto flex items-center gap-2`,children:[(0,G.jsxs)(`span`,{className:N(`hidden items-center gap-1.5 border px-2 py-1 font-mono text-[9px] uppercase sm:flex`,e?`border-success/30 text-success`:`border-warning/30 text-warning`),children:[(0,G.jsx)(`span`,{className:`size-1.5 bg-current`}),` `,o(e?`activity:memoryManager.liveStore`:`activity:memoryManager.reconnecting`)]}),(0,G.jsxs)(L,{variant:`outline`,size:`sm`,onClick:i,disabled:n,"aria-label":o(`activity:memoryManager.refreshAria`),children:[(0,G.jsx)(M,{className:N(`size-3.5`,n&&`animate-spin`)}),(0,G.jsx)(`span`,{className:`hidden sm:inline`,children:o(`common:action.refresh`)})]}),(0,G.jsxs)(L,{size:`sm`,onClick:a,children:[(0,G.jsx)(f,{className:`size-3.5`}),` `,o(`activity:memoryManager.newMemory`)]})]})]})]})}function tt({stats:e,memories:n,filteredCount:r,allTagsCount:i}){let{t:a}=t(),o=n.filter(e=>e.audience).length,s=new Set;if(o>0){for(let e of n)if(e.audience){for(let t of e.audience.roles??[])s.add(t);for(let t of e.audience.taskTypes??[])s.add(t);for(let t of e.audience.modes??[])s.add(t)}}return(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(`div`,{className:`grid shrink-0 grid-cols-2 gap-px border-b border-border/70 bg-border/60 sm:grid-cols-4`,children:[(0,G.jsx)(U,{label:a(`activity:memoryManager.tabMemories`),value:e?.total??n.length,hint:`${r} visible`}),(0,G.jsx)(U,{label:a(`activity:memoryManager.tabActive`),value:e?.byStatus.active??n.filter(e=>e.status===`active`).length,hint:`retrievable`,tone:`success`}),(0,G.jsx)(U,{label:a(`activity:memoryManager.tabNeedsReview`),value:(e?.byStatus.stale??0)+(e?.byStatus.contradicted??0),hint:a(`activity:memoryManager.staleConflicts`),tone:`warning`}),(0,G.jsx)(`div`,{className:`hidden sm:block`,children:(0,G.jsx)(U,{label:a(`activity:memoryManager.tabGraphEdges`),value:e?.edges??0,hint:`${i} tags`,tone:`info`})})]}),o>0&&(0,G.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 border-b border-border/70 bg-primary/5 px-4 py-1.5`,children:[(0,G.jsx)(b,{className:`size-3.5 text-primary`}),(0,G.jsxs)(`span`,{className:`text-[11px] font-medium text-primary`,children:[o,` audience-scoped memory`,o===1?``:`ies`]}),s.size>0&&(0,G.jsxs)(`span`,{className:`text-[10px] text-muted-foreground`,children:[`(`,[...s].sort().join(`, `),`)`]})]})]})}function nt({listCandidates:e,resolveCandidate:n,onOpenMemory:r,client:i,active:a}){let{t:o}=t(),[s,c]=(0,K.useState)([]),[u,d]=(0,K.useState)(!1),[f,p]=(0,K.useState)(null),[m,h]=(0,K.useState)(null),[g,_]=(0,K.useState)(!1),[v,y]=(0,K.useState)(()=>new Set),ee=(0,K.useRef)(0),b=(0,K.useCallback)(()=>{let t=++ee.current;d(!0),p(null);let n=i.on(`memory.sage.listCandidates`,e=>{if(t===ee.current){if(n(),e.payload.error)p(String(e.payload.error)),c([]);else{let t=(Array.isArray(e.payload.candidates)?e.payload.candidates:[]).filter(e=>e.status===`pending`);c(t),y(e=>{let n=new Set;for(let r of e)t.some(e=>e.id===r)&&n.add(r);return n})}d(!1)}}),r=setTimeout(()=>{t===ee.current&&(n(),d(!1),p(o(`activity:memoryManager.reviewLoadTimeout`)))},15e3);return e({includeResolved:!1},{echoToChat:!1}),()=>{clearTimeout(r),n()}},[i,e,o]);(0,K.useEffect)(()=>{if(a)return b()},[a,b]);let x=(0,K.useCallback)((e,t)=>new Promise(r=>{let a=i.on(`memory.sage.candidateResolve`,e=>{a();let t=e.payload.error;r(!t)});n({candidateId:e,action:t,reason:t===`reject`?`Rejected via Memory Review tab`:void 0},{echoToChat:!1}),setTimeout(()=>{a(),r(!1)},15e3)}),[i,n]),S=(0,K.useCallback)(async(e,t)=>{h(e),await x(e,t),h(null),b()},[b,x]),C=(0,K.useCallback)(async e=>{let t=[...v];if(t.length!==0){_(!0);for(let n of t)await x(n,e);_(!1),y(new Set),b()}},[b,x,v]),w=e=>{y(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},T=()=>{y(new Set(s.map(e=>e.id)))},ne=()=>y(new Set);if(u&&s.length===0)return(0,G.jsxs)(`div`,{className:`flex flex-1 items-center justify-center gap-2 p-6 text-sm text-muted-foreground`,children:[(0,G.jsx)(D,{className:`size-4 animate-spin`}),o(`activity:memoryManager.reviewLoading`)]});if(f&&s.length===0)return(0,G.jsxs)(`div`,{className:`flex flex-1 flex-col items-center justify-center gap-3 p-6 text-center`,children:[(0,G.jsx)(l,{className:`size-5 text-warning`}),(0,G.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:f}),(0,G.jsxs)(L,{size:`sm`,variant:`outline`,onClick:()=>b(),children:[(0,G.jsx)(M,{className:`size-3.5`}),` `,o(`common:action.retry`)]})]});if(s.length===0)return(0,G.jsxs)(`div`,{className:`flex flex-1 flex-col items-center justify-center gap-2 p-8 text-center`,children:[(0,G.jsx)(O,{className:`size-6 text-success`}),(0,G.jsx)(`p`,{className:`text-sm font-medium`,children:o(`activity:memoryManager.reviewEmptyTitle`)}),(0,G.jsx)(`p`,{className:`max-w-sm text-xs text-muted-foreground`,children:o(`activity:memoryManager.reviewEmptyHint`)}),(0,G.jsxs)(L,{size:`sm`,variant:`ghost`,onClick:()=>b(),children:[(0,G.jsx)(M,{className:`size-3.5`}),` `,o(`common:action.refresh`)]})]});let E=v.size,re=E===s.length&&s.length>0;return(0,G.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:[(0,G.jsxs)(`div`,{className:`flex shrink-0 flex-wrap items-center justify-between gap-2 border-b border-border/60 px-3 py-2`,children:[(0,G.jsx)(`span`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:o(`activity:memoryManager.reviewPendingCount`,{count:s.length})}),(0,G.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[(0,G.jsx)(L,{size:`sm`,variant:`ghost`,className:`h-7 text-[11px]`,onClick:re?ne:T,children:o(re?`activity:memoryManager.reviewClearSelection`:`activity:memoryManager.reviewSelectAll`)}),(0,G.jsxs)(L,{size:`sm`,className:`h-7`,disabled:E===0||g,onClick:()=>void C(`accept`),children:[g?(0,G.jsx)(D,{className:`size-3 animate-spin`}):(0,G.jsx)(O,{className:`size-3`}),o(`activity:memoryManager.reviewBulkAccept`),E>0?` (${E})`:``]}),(0,G.jsxs)(L,{size:`sm`,variant:`outline`,className:`h-7`,disabled:E===0||g,onClick:()=>void C(`reject`),children:[(0,G.jsx)(te,{className:`size-3`}),o(`activity:memoryManager.reviewBulkKeep`),E>0?` (${E})`:``]}),(0,G.jsx)(L,{size:`sm`,variant:`ghost`,className:`h-7`,onClick:()=>b(),disabled:u,children:(0,G.jsx)(M,{className:N(`size-3.5`,u&&`animate-spin`)})})]})]}),(0,G.jsx)(`ul`,{className:`min-h-0 flex-1 space-y-2 overflow-y-auto p-3`,children:s.map(e=>{let t=e.targetMemoryId??e.memoryId,n=e.reviewReason??e.reason??``,i=m===e.id||g,a=v.has(e.id);return(0,G.jsx)(`li`,{className:N(`rounded-md border bg-card/60 p-3 text-sm shadow-sm`,a?`border-primary/50 ring-1 ring-primary/20`:`border-border/70`),children:(0,G.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,G.jsx)(`input`,{type:`checkbox`,className:`mt-1 size-3.5 accent-primary`,checked:a,disabled:g,onChange:()=>w(e.id),"aria-label":o(`activity:memoryManager.reviewSelectOne`)}),(0,G.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,G.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5 text-[10px] uppercase tracking-wide text-muted-foreground`,children:[(0,G.jsx)(`span`,{className:`font-mono text-warning`,children:e.suggestedAction??`review`}),(0,G.jsx)(`span`,{children:`·`}),(0,G.jsx)(`span`,{children:Ae(e.createdAt)}),e.tags?.includes(`triage`)&&(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`span`,{children:`·`}),(0,G.jsx)(`span`,{className:`text-info`,children:`triage`})]})]}),(0,G.jsx)(`p`,{className:`mt-1.5 text-[13px] leading-snug text-foreground`,children:V(e.text,220)}),n?(0,G.jsx)(`p`,{className:`mt-1 text-[11px] text-muted-foreground`,children:n}):null,t?(0,G.jsxs)(`button`,{type:`button`,className:`mt-1 font-mono text-[10px] text-primary hover:underline`,onClick:()=>r?.(t),children:[t.slice(0,16),`…`]}):null,(0,G.jsxs)(`div`,{className:`mt-2 flex flex-wrap gap-1.5`,children:[(0,G.jsxs)(L,{size:`sm`,className:`h-7`,disabled:i,onClick:()=>void S(e.id,`accept`),children:[m===e.id?(0,G.jsx)(D,{className:`size-3 animate-spin`}):(0,G.jsx)(O,{className:`size-3`}),o(`activity:memoryManager.actionAcceptDeletion`)]}),(0,G.jsxs)(L,{size:`sm`,variant:`outline`,className:`h-7`,disabled:i,onClick:()=>void S(e.id,`reject`),children:[(0,G.jsx)(te,{className:`size-3`}),o(`activity:memoryManager.actionKeep`)]})]})]})]})},e.id)})})]})}function rt(e,t){let n=t.searchQuery.trim().toLowerCase();return e.filter(e=>{if(t.statusFilter!==`all`&&e.status!==t.statusFilter||t.kindFilter!==`all`&&e.kind!==t.kindFilter||t.tagFilter&&!e.tags.includes(t.tagFilter)||t.audienceOnly&&!e.audience)return!1;if(!n)return!0;let r=e.anchors.map(e=>[e.path,e.symbol,e.command,e.role].filter(Boolean).join(` `)).join(` `),i=e.audience?[e.audience.roles?.join(` `)??``,e.audience.taskTypes?.join(` `)??``,e.audience.modes?.join(` `)??``].join(` `):``;return[e.id,e.text,e.summary??``,e.kind,e.scope,e.tags.join(` `),r,i].join(` `).toLowerCase().includes(n)})}function it(e){let t=new Map;for(let n of e)for(let e of n.tags)t.set(e,(t.get(e)??0)+1);return[...t.entries()].sort((e,t)=>t[1]-e[1]||e[0].localeCompare(t[0]))}function at(e){if(!e)return[];let t=[];e.supersededBy&&t.push({relation:`Superseded by`,id:e.supersededBy});for(let n of e.supersedes??[])t.push({relation:`Supersedes`,id:n});for(let n of e.contradicts??[])t.push({relation:`Contradicts`,id:n});return t}var ot=100;function st(){let{t:e}=t(),{client:n,listSageMemoriesPage:r,listMemoryCandidates:i,rememberSage:a,updateSage:o,deleteSage:s,getSageGraph:c,recoverSage:l,resolveMemoryCandidate:u}=le(),d=ue(e=>e.wsConnected),[f,p]=(0,K.useState)([]),[m,h]=(0,K.useState)(null),[g,_]=(0,K.useState)(!0),[v,y]=(0,K.useState)(!1),[ee,b]=(0,K.useState)(null),[te,x]=(0,K.useState)(null),[S,C]=(0,K.useState)(null),[w,T]=(0,K.useState)(null),[ne,E]=(0,K.useState)([]),[re,ie]=(0,K.useState)([]),[ae,D]=(0,K.useState)(null),[oe,se]=(0,K.useState)(!1),[ce,O]=(0,K.useState)(!1),[k,A]=(0,K.useState)(!1),[j,M]=(0,K.useState)(be),[N,de]=(0,K.useState)(be),[fe,P]=(0,K.useState)(null),[F,pe]=(0,K.useState)(null),[I,me]=(0,K.useState)(``),[L,R]=(0,K.useState)(`all`),[z,he]=(0,K.useState)(`all`),[_e,ve]=(0,K.useState)(!1),[B,V]=(0,K.useState)(null),[xe,Se]=(0,K.useState)(`active`),Ce=xe===`deleted`,we=xe===`review`,[Te,Ee]=(0,K.useState)(null),[De,H]=(0,K.useState)(!1),[U,Oe]=(0,K.useState)(!1),[ke,Ae]=(0,K.useState)({}),[je,G]=(0,K.useState)(!1),[Me,Ne]=(0,K.useState)(null),Pe=(0,K.useRef)(!1),q=(0,K.useRef)(!0),Fe=(0,K.useRef)(0),J=(0,K.useRef)(0),Y=(0,K.useRef)(null),X=(0,K.useRef)(null),Ie=(0,K.useMemo)(()=>{let e=new Set;for(let t of f)for(let n of t.anchors??[])n.type===`file`&&n.path&&e.add(n.path);return e},[f]),Le=(0,K.useMemo)(()=>JSON.stringify(j)!==JSON.stringify(N),[N,j]),Z=(0,K.useMemo)(()=>f.find(e=>e.id===w)??null,[f,w]),Re=(0,K.useCallback)(e=>{let t=e!==null,i=++Fe.current;Y.current?.(),b(null),t?Oe(!0):(y(!0),Pe.current||_(!0));let a=()=>{},o=null,s=!1,c=()=>{s||(s=!0,o!==null&&clearTimeout(o),a(),Y.current===c&&(Y.current=null))};a=n.on(`memory.sage.listPage`,e=>{if(i!==Fe.current||!q.current){c();return}if(c(),e.payload.error)b(e.payload.error);else{let n=e.payload.memories??[];p(e=>t?[...e,...n]:n),Ee(e.payload.nextCursor??null),H(!!e.payload.nextCursor);let r=e.payload.statusCounts??{};Ae(r);let i=Object.values(r).reduce((e,t)=>e+t,0);e.payload.stats?h(e.payload.stats):h(e=>({total:i,byStatus:r,byKind:e?.byKind??{},edges:e?.edges??0})),Pe.current=!0,t||T(e=>e&&n.some(t=>t.id===e)?e:null)}_(!1),y(!1),Oe(!1)}),o=setTimeout(()=>{i!==Fe.current||!q.current||(c(),b(`The memory store did not respond. Check the WebSocket connection and try again.`),_(!1),y(!1),Oe(!1))},2e4),Y.current=c,r({limit:ot,...Ce?{statuses:[`deleted`]}:{},...e?{cursor:e}:{},...I.trim()?{query:I.trim()}:{},...z===`all`?{}:{kind:z}},{echoToChat:!1})},[n,z,r,I,Ce]),Q=(0,K.useCallback)(()=>{Ee(null),H(!1),Re(null)},[Re]),ze=(0,K.useCallback)(()=>{U||!Te||Re(Te)},[Re,U,Te]);(0,K.useEffect)(()=>(q.current=!0,Q(),()=>{q.current=!1,Fe.current+=1,J.current+=1,Y.current?.(),X.current?.()}),[Q]),(0,K.useEffect)(()=>{if(E([]),ie([]),D(null),!w){se(!1);return}let e=w;se(!0);let t=null,r=n.on(`memory.sage.graph`,n=>{n.payload.query===e&&(t!==null&&clearTimeout(t),E(n.payload.edges??[]),ie(n.payload.memories??[]),D(n.payload.error??null),se(!1))});return t=setTimeout(()=>{D(`Relationship graph did not respond in time.`),se(!1)},15e3),c(e,{maxDepth:1,limit:120},{echoToChat:!1}),()=>{t!==null&&clearTimeout(t),r()}},[n,c,w]);let Be=(0,K.useRef)(d);(0,K.useEffect)(()=>{d&&!Be.current&&Pe.current&&Q(),Be.current=d},[Q,d]),(0,K.useEffect)(()=>{if(!S)return;let e=setTimeout(()=>C(null),4e3);return()=>clearTimeout(e)},[S]);let $=(0,K.useCallback)(()=>!Le||!ce&&!k||window.confirm(`Discard the unsaved memory changes?`),[k,Le,ce]),Ve=(0,K.useCallback)(()=>{if(!$())return;let e=be();M(e),de(e),A(!0),O(!1),T(null),x(null)},[$]),He=(0,K.useCallback)(e=>{$()&&(T(e),A(!1),O(!1),x(null))},[$]),Ue=(0,K.useCallback)(e=>{let t=e===void 0?Z:f.find(t=>t.id===e)??null;if(!t||t.status===`deleted`)return;e!==void 0&&T(e);let n=ye(t);M(n),de(n),O(!0),A(!1),x(null)},[f,Z]),We=(0,K.useCallback)(()=>{$()&&(O(!1),A(!1),x(null))},[$]),Ge=(0,K.useCallback)((t,r,i)=>{if(!j.text.trim()){x(`Memory content is required.`);return}let a=++J.current;X.current?.(),P(i),x(null),C(null);let o=()=>{},s=null,c=!1,l=()=>{c||(c=!0,s!==null&&clearTimeout(s),o(),X.current===l&&(X.current=null))},u=t=>{if(a!==J.current||!q.current){l();return}if(l(),P(null),t.payload.error||!t.payload.memory){x(t.payload.error??`The server returned no memory record.`);return}let n=t.payload.memory;p(e=>{let t=e.filter(e=>e.id!==n.id);return[n,...t]}),T(n.id),A(!1),O(!1),C(e(i===`create`?`activity:memoryManager.memoryCaptured`:`activity:memoryManager.memoryUpdated`)),Q()};o=t===`memory.sage.remember`?n.on(`memory.sage.remember`,u):n.on(`memory.sage.update`,u),s=setTimeout(()=>{a!==J.current||!q.current||(l(),P(null),x(e(`activity:memoryManager.mutationTimeout`,{verb:e(i===`create`?`activity:memoryManager.createAction`:`common:action.save`)})))},2e4),X.current=l,r()},[n,j.text,Q,e]),Ke=(0,K.useCallback)(()=>{Ge(`memory.sage.remember`,()=>a({text:j.text.trim(),kind:j.kind,scope:j.scope,tags:W(j.tags),importance:j.importance,confidence:j.confidence,freshness:j.freshness,anchors:ge(j.anchors),...W(j.audienceRoles).length||W(j.audienceTaskTypes).length||W(j.audienceModes).length?{audience:{roles:W(j.audienceRoles),taskTypes:W(j.audienceTaskTypes),modes:W(j.audienceModes)}}:{},supersedes:W(j.supersedes),contradicts:W(j.contradicts)},{echoToChat:!1}),`create`)},[j,a,Ge]),qe=(0,K.useCallback)(()=>{Z&&Ge(`memory.sage.update`,()=>o(Z.id,{text:j.text.trim(),kind:j.kind,status:j.status,tags:W(j.tags),importance:j.importance,confidence:j.confidence,freshness:j.freshness,anchors:ge(j.anchors),...W(j.audienceRoles).length||W(j.audienceTaskTypes).length||W(j.audienceModes).length?{audience:{roles:W(j.audienceRoles),taskTypes:W(j.audienceTaskTypes),modes:W(j.audienceModes)}}:{},supersedes:W(j.supersedes),contradicts:W(j.contradicts)},{echoToChat:!1}),`update`)},[j,Ge,Z,o]),Je=(0,K.useCallback)(()=>{if(!F)return;let e=++J.current;X.current?.(),P(`delete`),x(null);let t=()=>{},r=null,i=!1,a=()=>{i||(i=!0,r!==null&&clearTimeout(r),t(),X.current===a&&(X.current=null))};t=n.on(`memory.sage.delete`,t=>{if(e!==J.current||!q.current){a();return}if(a(),P(null),!t.payload.success){x(t.payload.message||`Delete failed.`);return}pe(null),T(null),O(!1),C(`Memory deleted and relationship edges cleaned up.`),Q()}),r=setTimeout(()=>{e!==J.current||!q.current||(a(),P(null),x(`Delete timed out. The memory may still exist; refresh to confirm.`))},2e4),X.current=a,s(F,`Deleted from the WebUI Memory Manager.`)},[n,s,F,Q]),Ye=(0,K.useCallback)((e,t,r)=>{let i=++J.current;X.current?.(),x(null);let a=()=>{},o=null,s=!1,c=()=>{s||(s=!0,o!==null&&clearTimeout(o),a(),X.current===c&&(X.current=null))};a=n.on(e,e=>{if(i!==J.current||!q.current){c();return}c(),r(e.payload)}),o=setTimeout(()=>{i!==J.current||!q.current||(c(),x(`The memory store did not respond. Check the WebSocket connection and try again.`))},2e4),X.current=c,t()},[n]),Xe=(0,K.useMemo)(()=>rt(f,{searchQuery:I,statusFilter:L,kindFilter:z,tagFilter:B,audienceOnly:_e}),[_e,z,f,I,L,B]),Ze=(0,K.useMemo)(()=>it(f),[f]),Qe=(0,K.useMemo)(()=>at(Z),[Z]),$e=(0,K.useCallback)(()=>{me(``),R(`all`),he(`all`),ve(!1),V(null)},[]);return{client:n,wsConnected:d,memories:f,stats:m,initialLoading:g,refreshing:v,loadError:ee,mutationError:te,setMutationError:x,notice:S,setNotice:C,selectedId:w,setSelectedId:T,selectedMemory:Z,graphEdges:ne,graphMemories:re,graphError:ae,graphLoading:oe,editing:ce,creating:k,draft:j,setDraft:M,busyAction:fe,deletingId:F,setDeletingId:pe,searchQuery:I,setSearchQuery:me,statusFilter:L,setStatusFilter:R,kindFilter:z,setKindFilter:he,audienceOnly:_e,setAudienceOnly:ve,tagFilter:B,setTagFilter:V,libraryView:xe,setLibraryView:Se,showDeleted:Ce,showReview:we,hasMore:De,loadingMore:U,statusCounts:ke,drawerOpen:je,setDrawerOpen:G,currentFilePath:Me,setCurrentFilePath:Ne,knownFilePaths:Ie,filteredMemories:Xe,allTags:Ze,relatedMemories:Qe,hasFilters:!!(I||L!==`all`||z!==`all`||B||_e),detailOpen:k||!!Z,drawerActive:je&&!!Me,loadMemories:Q,loadMore:ze,openCreate:Ve,openMemory:He,openEdit:Ue,cancelEditor:We,submitCreate:Ke,submitUpdate:qe,confirmDelete:Je,sendWithAck:Ye,clearFilters:$e,resolveMemoryCandidate:u,updateSage:o,recoverSage:l,listMemoryCandidates:i}}function ct(){let{t:e}=t(),n=de(e=>e.setCurrentView),i=z(`memory`),a=st();return a.initialLoading&&a.memories.length===0?(0,G.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col bg-background`,"aria-busy":`true`,children:[(0,G.jsxs)(`div`,{className:`border-b border-border/70 bg-card/70 px-5 py-4`,children:[(0,G.jsx)(`div`,{className:`h-3 w-28 animate-pulse bg-muted`}),(0,G.jsx)(`div`,{className:`mt-3 h-7 w-56 animate-pulse bg-muted`})]}),(0,G.jsxs)(`div`,{className:`grid flex-1 gap-px bg-border/60 md:grid-cols-[minmax(300px,0.82fr)_minmax(0,1.35fr)]`,children:[(0,G.jsx)(`div`,{className:`space-y-px bg-background p-4`,children:Array.from({length:7},(e,t)=>(0,G.jsx)(`div`,{className:`h-24 animate-pulse border border-border/60 bg-card/45`},t))}),(0,G.jsx)(`div`,{className:`hidden bg-background p-6 md:block`,children:(0,G.jsx)(`div`,{className:`h-full animate-pulse border border-border/60 bg-card/35`})})]}),(0,G.jsx)(`span`,{className:`sr-only`,role:`status`,children:e(`activity:memoryManager.loadingSageContent`)})]}):a.loadError&&a.memories.length===0?(0,G.jsx)(`div`,{className:`flex h-full min-h-0 items-center justify-center bg-background p-6`,children:(0,G.jsxs)(`div`,{className:`max-w-md border border-destructive/35 bg-card p-6 shadow-2xl`,children:[(0,G.jsx)(`span`,{className:`flex size-11 items-center justify-center border border-destructive/35 bg-destructive/10 text-destructive`,children:(0,G.jsx)(l,{className:`size-5`})}),(0,G.jsx)(`h2`,{className:`mt-4 text-lg font-bold`,children:e(`activity:memoryManager.storeUnavailable`)}),(0,G.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-muted-foreground`,children:a.loadError}),(0,G.jsxs)(`div`,{className:`mt-5 flex gap-2`,children:[(0,G.jsxs)(L,{onClick:a.loadMemories,children:[(0,G.jsx)(M,{className:`size-4`}),` `,e(`common:action.retry`)]}),(0,G.jsxs)(L,{variant:`outline`,onClick:()=>n(`chat`),children:[(0,G.jsx)(r,{className:`size-4`}),` `,e(`activity:memoryManager.backToChat`)]})]})]})}):(0,G.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col overflow-hidden bg-background`,children:[(0,G.jsx)(et,{wsConnected:a.wsConnected,refreshing:a.refreshing,onRefresh:a.loadMemories,onCreate:a.openCreate}),(0,G.jsx)(tt,{stats:a.stats,memories:a.memories,filteredCount:a.filteredMemories.length,allTagsCount:a.allTags.length}),(a.notice||a.loadError||a.mutationError)&&(0,G.jsxs)(`div`,{className:`shrink-0 border-b border-border/70 px-4 py-2`,"aria-live":`polite`,children:[a.notice&&(0,G.jsxs)(`div`,{role:`status`,className:`flex items-center gap-2 text-xs text-success`,children:[(0,G.jsx)(O,{className:`size-3.5`}),` `,a.notice]}),a.loadError&&(0,G.jsxs)(`div`,{role:`alert`,className:`flex items-center gap-2 text-xs text-warning`,children:[(0,G.jsx)(l,{className:`size-3.5`}),` `,a.loadError,` Existing content remains available.`]}),a.mutationError&&!a.editing&&!a.creating&&(0,G.jsxs)(`div`,{role:`alert`,className:`flex items-center gap-2 text-xs text-destructive`,children:[(0,G.jsx)(l,{className:`size-3.5`}),` `,a.mutationError]})]}),(0,G.jsxs)(`div`,{className:`grid min-h-0 flex-1 md:grid-cols-[minmax(320px,0.82fr)_minmax(0,1.35fr)]`,children:[(0,G.jsxs)(`section`,{className:N(`min-h-0 border-r border-border/70 bg-card/25`,a.detailOpen?`hidden md:flex md:flex-col`:`flex flex-col`),"aria-label":e(`activity:memoryManager.libraryAria`),children:[(0,G.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1 border-b border-border/60 px-3 pt-1`,role:`tablist`,"aria-label":e(`activity:memoryManager.viewAria`),children:[(0,G.jsx)(L,{type:`button`,variant:`ghost`,size:`sm`,role:`tab`,"aria-selected":a.libraryView===`active`,onClick:()=>a.setLibraryView(`active`),className:N(`h-7 rounded-b-none border-b-2 px-3 text-[11px]`,a.libraryView===`active`?`border-primary text-foreground`:`border-transparent text-muted-foreground`),children:e(`activity:memoryManager.tabActive`)}),(0,G.jsx)(L,{type:`button`,variant:`ghost`,size:`sm`,role:`tab`,"aria-selected":a.showReview,onClick:()=>a.setLibraryView(`review`),className:N(`h-7 rounded-b-none border-b-2 px-3 text-[11px]`,a.showReview?`border-primary text-foreground`:`border-transparent text-muted-foreground`),children:e(`activity:memoryManager.tabReview`)}),(0,G.jsxs)(L,{type:`button`,variant:`ghost`,size:`sm`,role:`tab`,"aria-selected":a.showDeleted,onClick:()=>a.setLibraryView(`deleted`),className:N(`h-7 rounded-b-none border-b-2 px-3 text-[11px]`,a.showDeleted?`border-primary text-foreground`:`border-transparent text-muted-foreground`),children:[e(`activity:memoryManager.tabDeleted`),typeof a.statusCounts.deleted==`number`?` (${a.statusCounts.deleted})`:``]})]}),a.showReview?(0,G.jsx)(nt,{active:a.showReview,client:a.client,listCandidates:a.listMemoryCandidates,resolveCandidate:a.resolveMemoryCandidate,onOpenMemory:a.openMemory}):(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(Je,{searchQuery:a.searchQuery,statusFilter:a.statusFilter,kindFilter:a.kindFilter,audienceOnly:a.audienceOnly,tagFilter:a.tagFilter,hasFilters:a.hasFilters,allTags:a.allTags,stats:a.stats,onSearchChange:a.setSearchQuery,onStatusFilterChange:a.setStatusFilter,onKindFilterChange:a.setKindFilter,onToggleAudienceOnly:()=>a.setAudienceOnly(e=>!e),onTagFilterChange:a.setTagFilter,onClearFilters:a.clearFilters}),(0,G.jsx)(Xe,{memoryListRef:i,memories:a.memories,filteredMemories:a.filteredMemories,selectedId:a.selectedId,onSelectMemory:a.openMemory,onOpenCreate:a.openCreate,onClearFilters:a.clearFilters}),a.hasMore?(0,G.jsx)(`div`,{className:`shrink-0 border-t border-border/60 p-2`,children:(0,G.jsx)(L,{type:`button`,variant:`outline`,size:`sm`,onClick:a.loadMore,disabled:a.loadingMore,className:`h-7 w-full text-[11px]`,children:a.loadingMore?e(`common:action.loading`):`Load more (${a.memories.length} loaded)`})}):null]})]}),(0,G.jsxs)(`section`,{className:N(`min-h-0 bg-background`,a.detailOpen?`flex flex-col`:`hidden md:flex md:flex-col`),"aria-label":e(`activity:memoryManager.detailAria`),children:[a.memories.some(e=>(e.anchors??[]).some(e=>e.type===`file`&&e.path))&&(0,G.jsx)(Ke,{currentFilePath:a.currentFilePath,knownFilePaths:a.knownFilePaths,drawerActive:a.drawerActive,onFilePathChange:e=>{e&&a.knownFilePaths.has(e)?(a.setCurrentFilePath(e),a.setDrawerOpen(!0)):e?a.setCurrentFilePath(e):a.setCurrentFilePath(null)},onToggleDrawer:()=>{a.currentFilePath&&a.setDrawerOpen(e=>!e)}}),a.creating?(0,G.jsx)(qe,{mode:`create`,draft:a.draft,busy:a.busyAction===`create`,error:a.mutationError,onChange:a.setDraft,onCancel:a.cancelEditor,onSubmit:a.submitCreate}):a.selectedMemory?a.editing?(0,G.jsx)(qe,{mode:`edit`,draft:a.draft,busy:a.busyAction===`update`,error:a.mutationError,onChange:a.setDraft,onCancel:a.cancelEditor,onSubmit:a.submitUpdate}):a.drawerActive?(0,G.jsx)(je,{filePath:a.currentFilePath,open:a.drawerActive,onClose:()=>a.setDrawerOpen(!1),onShowMemory:e=>a.setSelectedId(e),onAcceptDeletion:(e,t)=>{a.sendWithAck(`memory.sage.candidateResolve`,()=>a.resolveMemoryCandidate({candidateId:e,action:`accept`}),n=>{if(n.error){a.setMutationError(n.error);return}a.setNotice(`Accepted hygiene review for ${t.slice(0,12)}… (candidate ${e.slice(0,12)}…).`),a.loadMemories()})},onKeep:(e,t)=>{a.sendWithAck(`memory.sage.candidateResolve`,()=>a.resolveMemoryCandidate({candidateId:e,action:`reject`}),n=>{if(n.error){a.setMutationError(n.error);return}a.setNotice(`Kept ${t.slice(0,12)}… (candidate ${e.slice(0,12)}… rejected).`),a.loadMemories()})},onUpdate:e=>{a.openEdit(e)},onMarkPermanent:e=>{a.sendWithAck(`memory.sage.update`,()=>a.updateSage(e,{persistence:`permanent`}),t=>{if(t.error||!t.memory){a.setMutationError(t.error??`The server returned no memory record.`);return}a.setNotice(`Memory ${e.slice(0,12)}… promoted to permanent.`),a.loadMemories()})},onRecover:e=>{a.sendWithAck(`memory.sage.recover`,()=>a.recoverSage({id:e,reason:`recovered via file drawer`}),t=>{if(t.error){a.setMutationError(t.error);return}a.setNotice(`Recovered ${e.slice(0,12)}…`),a.loadMemories()})}}):(0,G.jsx)(ze,{memory:a.selectedMemory,allMemories:[...a.memories,...a.graphMemories],relatedMemories:a.relatedMemories,graphEdges:a.graphEdges,graphLoading:a.graphLoading,graphError:a.graphError,onClose:()=>a.setSelectedId(null),onOpenMemory:a.openMemory,onEdit:a.openEdit,onDelete:()=>a.setDeletingId(a.selectedMemory.id),onTagSelect:e=>{a.setTagFilter(e),a.setSelectedId(null)},onNotice:a.setNotice}):(0,G.jsx)($e,{onCapture:a.openCreate})]})]}),(0,G.jsx)(Me,{busyAction:a.busyAction,deletingId:a.deletingId,memories:a.memories,onCancel:()=>a.setDeletingId(null),onConfirm:a.confirmDelete,onOpenChange:e=>{!e&&a.busyAction!==`delete`&&a.setDeletingId(null)}})]})}export{ct as MemoryManager};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{Ba as t,Ga as n,Ot as r,Qr as i,ea as a,lt as o,na as s,sn as c,yn as l}from"./vendor-C_zEzV4N.js";import"./i18n-CDoHRskt.js";import{t as u}from"./ws-client-C2ppA8xa.js";import{t as d}from"./utils-tsZEnrBH.js";var f=e(n(),1),p=o(),m=200,h=[`raw_user`,`refined_user`,`system_prompt`,`autonomous_next_step`,`self_healing_retry`,`clarify_interaction`,`subagent_delegation`];function g(e,t){return e(`activity:promptJournal.cat.${t}`,t)}function _(){let{t:e}=t(),n=u(),[a,o]=(0,f.useState)([]),[s,_]=(0,f.useState)(!0),[y,b]=(0,f.useState)(null),[x,S]=(0,f.useState)(!0),[C,w]=(0,f.useState)({category:``,session:``,limit:m}),[T,E]=(0,f.useState)(new Set),D=(0,f.useCallback)(()=>{if(!n.isConnected){S(!1);return}S(!0),b(null),n.send({type:`prompts.journal`,payload:{filter:{...C.category?{category:C.category}:{},limit:C.limit}}})},[n,C.category,C.limit]);(0,f.useEffect)(()=>{let e=e=>{let t=e.payload;_(t.enabled),o(t.entries??[]),b(t.error??null),S(!1)};return n.on(`prompts.journal`,e),D(),()=>n.off(`prompts.journal`,e)},[n,D]);let O=(0,f.useMemo)(()=>{let e=C.session.trim().toLowerCase(),t=a.filter(t=>!e||t.sessionId.toLowerCase().includes(e)),n=new Map;for(let e of[...t].reverse()){let t=e.timestamp.slice(0,10),r=n.get(t)??[];r.push(e),n.set(t,r)}return[...n.entries()]},[a,C.session]),k=(0,f.useMemo)(()=>{let e=0;for(let t of a)e+=t.metadata.tokenEstimate??0;return{count:a.length,tokens:e}},[a]),A=e=>{E(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},j=(0,f.useMemo)(()=>h.filter(e=>a.some(t=>t.category===e)),[a]);return(0,p.jsxs)(`div`,{className:`flex min-h-0 min-w-0 flex-1 flex-col overflow-y-auto`,children:[(0,p.jsxs)(`div`,{className:`border-b border-border/70 px-4 py-3 sm:px-6`,children:[(0,p.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,p.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,p.jsx)(c,{className:`h-5 w-5 text-primary`}),(0,p.jsx)(`h1`,{className:`text-base font-semibold`,children:e(`activity:promptJournal.title`)})]}),(0,p.jsxs)(`button`,{type:`button`,onClick:D,disabled:x,className:`inline-flex items-center gap-1.5 rounded-md border border-border px-2.5 py-1.5 text-xs text-muted-foreground transition-colors hover:bg-accent hover:text-foreground disabled:opacity-50`,children:[(0,p.jsx)(l,{className:d(`h-3.5 w-3.5`,x&&`animate-spin`)}),e(`activity:promptJournal.refresh`)]})]}),(0,p.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:e(`activity:promptJournal.subtitle`)}),s&&k.count>0&&(0,p.jsxs)(`div`,{className:`mt-2 flex flex-wrap gap-x-4 gap-y-1 text-xs text-muted-foreground`,children:[(0,p.jsx)(`span`,{children:e(`activity:promptJournal.statEntries`,{count:k.count})}),(0,p.jsx)(`span`,{children:e(`activity:promptJournal.statTokens`,{count:k.tokens.toLocaleString()})})]})]}),(0,p.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 border-b border-border/70 px-4 py-2 sm:px-6`,children:[(0,p.jsxs)(`label`,{className:`flex items-center gap-1.5 text-xs text-muted-foreground`,children:[(0,p.jsx)(`span`,{children:e(`activity:promptJournal.filterCategory`)}),(0,p.jsxs)(`select`,{value:C.category,onChange:e=>w(t=>({...t,category:e.target.value})),className:`rounded border border-border bg-background px-2 py-1 text-xs outline-none focus:ring-1 focus:ring-primary`,children:[(0,p.jsx)(`option`,{value:``,children:e(`activity:promptJournal.filterAll`)}),j.map(t=>(0,p.jsx)(`option`,{value:t,children:g(e,t)},t))]})]}),(0,p.jsxs)(`label`,{className:`flex items-center gap-1.5 text-xs text-muted-foreground`,children:[(0,p.jsx)(`span`,{children:e(`activity:promptJournal.filterSession`)}),(0,p.jsx)(`input`,{type:`text`,value:C.session,onChange:e=>w(t=>({...t,session:e.target.value})),placeholder:`sess_…`,className:`w-40 rounded border border-border bg-background px-2 py-1 text-xs outline-none focus:ring-1 focus:ring-primary`})]}),(0,p.jsxs)(`label`,{className:`flex items-center gap-1.5 text-xs text-muted-foreground`,children:[(0,p.jsx)(`span`,{children:e(`activity:promptJournal.filterLimit`)}),(0,p.jsxs)(`select`,{value:C.limit,onChange:e=>w(t=>({...t,limit:Number(e.target.value)})),className:`rounded border border-border bg-background px-2 py-1 text-xs outline-none focus:ring-1 focus:ring-primary`,children:[(0,p.jsx)(`option`,{value:50,children:`50`}),(0,p.jsx)(`option`,{value:200,children:`200`}),(0,p.jsx)(`option`,{value:1e3,children:`1000`})]})]})]}),(0,p.jsxs)(`div`,{className:`min-h-0 flex-1 px-4 py-3 sm:px-6`,children:[x&&(0,p.jsx)(`div`,{className:`py-10 text-center text-sm text-muted-foreground`,children:e(`activity:promptJournal.loading`)}),!x&&y&&(0,p.jsxs)(`div`,{className:`flex items-center justify-center gap-2 py-10 text-sm text-destructive`,children:[(0,p.jsx)(r,{className:`h-4 w-4`}),y]}),!x&&!y&&!s&&(0,p.jsx)(`div`,{className:`py-10 text-center text-sm text-muted-foreground`,children:e(`activity:promptJournal.disabled`)}),!x&&!y&&s&&O.length===0&&(0,p.jsxs)(`div`,{className:`py-10 text-center`,children:[(0,p.jsx)(i,{className:`mx-auto h-8 w-8 text-muted-foreground/50`}),(0,p.jsx)(`div`,{className:`mt-2 text-sm font-medium text-foreground`,children:e(`activity:promptJournal.emptyTitle`)}),(0,p.jsx)(`div`,{className:`mt-1 text-xs text-muted-foreground`,children:e(`activity:promptJournal.emptyHint`)})]}),!x&&!y&&s&&O.length>0&&(0,p.jsx)(`div`,{className:`space-y-5`,children:O.map(([e,t])=>(0,p.jsxs)(`section`,{children:[(0,p.jsxs)(`h2`,{className:`sticky top-0 z-10 border-b border-border/60 bg-background/90 py-1 text-xs font-semibold uppercase tracking-wide text-muted-foreground backdrop-blur`,children:[e,(0,p.jsx)(`span`,{className:`ml-2 font-normal normal-case text-muted-foreground/60`,children:t.length})]}),(0,p.jsx)(`ul`,{className:`mt-2 space-y-2`,children:t.map(e=>(0,p.jsx)(v,{entry:e,expanded:T.has(e.id),onToggle:()=>A(e.id)},e.id))})]},e))})]})]})}function v({entry:e,expanded:n,onToggle:r}){let{t:i}=t(),o=e.timestamp.slice(11,19),c=e.metadata,l=e.content.trim().slice(0,240),u=c.model||c.provider||c.activeTools?.length||c.contextFiles?.length||c.decisionReason||e.rawContent&&e.rawContent!==e.content;return(0,p.jsxs)(`li`,{className:`rounded-lg border border-border/70 bg-card/60`,children:[(0,p.jsxs)(`button`,{type:`button`,onClick:r,className:`flex w-full items-start gap-2 rounded-lg px-3 py-2 text-left hover:bg-accent/40`,children:[n?(0,p.jsx)(s,{className:`mt-0.5 h-4 w-4 shrink-0 text-muted-foreground`}):(0,p.jsx)(a,{className:`mt-0.5 h-4 w-4 shrink-0 text-muted-foreground`}),(0,p.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,p.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-2 gap-y-1 text-xs`,children:[(0,p.jsx)(`span`,{className:`tabular text-muted-foreground`,children:o}),(0,p.jsx)(`span`,{className:`rounded bg-primary/10 px-1.5 py-0.5 font-medium text-primary`,children:g(i,e.category)}),(0,p.jsx)(`span`,{className:`rounded bg-muted px-1.5 py-0.5 text-muted-foreground`,children:e.role}),(0,p.jsx)(`span`,{className:`font-mono text-[11px] text-muted-foreground`,children:e.sessionId})]}),!n&&l&&(0,p.jsx)(`div`,{className:`mt-1 line-clamp-2 whitespace-pre-wrap break-words text-xs text-foreground/80`,children:l})]}),(0,p.jsxs)(`span`,{className:`shrink-0 text-[11px] tabular text-muted-foreground`,children:[`~`,c.tokenEstimate,` `,i(`activity:promptJournal.tokens`)]})]}),n&&(0,p.jsxs)(`div`,{className:`border-t border-border/60 px-3 py-2 pl-9`,children:[(0,p.jsx)(`pre`,{className:`max-h-72 overflow-auto whitespace-pre-wrap break-words rounded bg-muted/50 p-2 text-xs text-foreground`,children:e.content}),e.rawContent&&e.rawContent!==e.content&&(0,p.jsxs)(`div`,{className:`mt-2`,children:[(0,p.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:i(`activity:promptJournal.rawInput`)}),(0,p.jsx)(`pre`,{className:`mt-1 max-h-40 overflow-auto whitespace-pre-wrap break-words rounded bg-muted/30 p-2 text-xs text-muted-foreground`,children:e.rawContent})]}),u&&(0,p.jsxs)(`dl`,{className:`mt-2 grid grid-cols-1 gap-x-4 gap-y-1 text-xs sm:grid-cols-2`,children:[c.model&&(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(`dt`,{className:`text-muted-foreground`,children:i(`activity:promptJournal.model`)}),(0,p.jsx)(`dd`,{className:`font-mono`,children:c.model})]}),c.provider&&(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(`dt`,{className:`text-muted-foreground`,children:i(`activity:promptJournal.provider`)}),(0,p.jsx)(`dd`,{className:`font-mono`,children:c.provider})]}),c.iterationIndex!==void 0&&(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(`dt`,{className:`text-muted-foreground`,children:i(`activity:promptJournal.iteration`)}),(0,p.jsxs)(`dd`,{className:`tabular`,children:[`#`,c.iterationIndex]})]}),(0,p.jsx)(`dt`,{className:`text-muted-foreground`,children:i(`activity:promptJournal.stats`)}),(0,p.jsxs)(`dd`,{className:`tabular text-muted-foreground`,children:[c.characterCount,` `,i(`activity:promptJournal.chars`),` · `,c.lineCount,` `,i(`activity:promptJournal.lines`)]}),c.durationMs!==void 0&&(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(`dt`,{className:`text-muted-foreground`,children:i(`activity:promptJournal.duration`)}),(0,p.jsxs)(`dd`,{className:`tabular`,children:[(c.durationMs/1e3).toFixed(1),`s`]})]}),c.activeTools&&c.activeTools.length>0&&(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(`dt`,{className:`text-muted-foreground`,children:i(`activity:promptJournal.tools`)}),(0,p.jsx)(`dd`,{className:`flex flex-wrap gap-1`,children:c.activeTools.map(e=>(0,p.jsx)(`code`,{className:`rounded bg-muted px-1 py-0.5 text-[11px] text-muted-foreground`,children:e},e))})]}),c.contextFiles&&c.contextFiles.length>0&&(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(`dt`,{className:`text-muted-foreground`,children:i(`activity:promptJournal.files`)}),(0,p.jsx)(`dd`,{className:`flex flex-wrap gap-1`,children:c.contextFiles.map(e=>(0,p.jsx)(`code`,{className:`rounded bg-muted px-1 py-0.5 font-mono text-[11px] text-muted-foreground`,children:e},e))})]}),c.decisionReason&&(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(`dt`,{className:`text-muted-foreground`,children:i(`activity:promptJournal.rationale`)}),(0,p.jsx)(`dd`,{className:`sm:col-span-1`,children:c.decisionReason})]})]})]})]})}export{_ as PromptJournalView};
|