@stigmer/react 0.0.43 → 0.0.44
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/execution/ArtifactContentRenderer.d.ts +58 -0
- package/execution/ArtifactContentRenderer.d.ts.map +1 -0
- package/execution/ArtifactContentRenderer.js +163 -0
- package/execution/ArtifactContentRenderer.js.map +1 -0
- package/execution/ArtifactPreviewModal.d.ts +3 -2
- package/execution/ArtifactPreviewModal.d.ts.map +1 -1
- package/execution/ArtifactPreviewModal.js +11 -62
- package/execution/ArtifactPreviewModal.js.map +1 -1
- package/execution/ExecutionPhaseBadge.js +1 -1
- package/execution/ExecutionPhaseBadge.js.map +1 -1
- package/execution/MessageThread.d.ts.map +1 -1
- package/execution/MessageThread.js +21 -2
- package/execution/MessageThread.js.map +1 -1
- package/execution/SetupProgress.d.ts +35 -0
- package/execution/SetupProgress.d.ts.map +1 -0
- package/execution/SetupProgress.js +65 -0
- package/execution/SetupProgress.js.map +1 -0
- package/execution/ToolCallGroup.d.ts.map +1 -1
- package/execution/ToolCallGroup.js +9 -1
- package/execution/ToolCallGroup.js.map +1 -1
- package/execution/ToolCallItem.js +8 -3
- package/execution/ToolCallItem.js.map +1 -1
- package/execution/artifact-utils.d.ts +50 -0
- package/execution/artifact-utils.d.ts.map +1 -1
- package/execution/artifact-utils.js +67 -5
- package/execution/artifact-utils.js.map +1 -1
- package/execution/index.d.ts +6 -1
- package/execution/index.d.ts.map +1 -1
- package/execution/index.js +3 -1
- package/execution/index.js.map +1 -1
- package/index.d.ts +4 -4
- package/index.d.ts.map +1 -1
- package/index.js +2 -2
- package/index.js.map +1 -1
- package/mcp-server/ApprovalPolicyGeneratorPanel.d.ts +34 -0
- package/mcp-server/ApprovalPolicyGeneratorPanel.d.ts.map +1 -0
- package/mcp-server/ApprovalPolicyGeneratorPanel.js +55 -0
- package/mcp-server/ApprovalPolicyGeneratorPanel.js.map +1 -0
- package/mcp-server/McpServerDetailView.d.ts.map +1 -1
- package/mcp-server/McpServerDetailView.js +101 -2
- package/mcp-server/McpServerDetailView.js.map +1 -1
- package/mcp-server/index.d.ts +8 -0
- package/mcp-server/index.d.ts.map +1 -1
- package/mcp-server/index.js +4 -0
- package/mcp-server/index.js.map +1 -1
- package/mcp-server/useDiscoverCapabilities.d.ts +59 -0
- package/mcp-server/useDiscoverCapabilities.d.ts.map +1 -0
- package/mcp-server/useDiscoverCapabilities.js +77 -0
- package/mcp-server/useDiscoverCapabilities.js.map +1 -0
- package/mcp-server/useMcpServerCredentials.d.ts +63 -0
- package/mcp-server/useMcpServerCredentials.d.ts.map +1 -0
- package/mcp-server/useMcpServerCredentials.js +64 -0
- package/mcp-server/useMcpServerCredentials.js.map +1 -0
- package/mcp-server/useTriggerApprovalPolicySession.d.ts +42 -0
- package/mcp-server/useTriggerApprovalPolicySession.d.ts.map +1 -0
- package/mcp-server/useTriggerApprovalPolicySession.js +111 -0
- package/mcp-server/useTriggerApprovalPolicySession.js.map +1 -0
- package/package.json +4 -4
- package/session/__tests__/useSessionConversation.test.js +223 -2
- package/session/__tests__/useSessionConversation.test.js.map +1 -1
- package/session/useSessionConversation.d.ts +8 -1
- package/session/useSessionConversation.d.ts.map +1 -1
- package/session/useSessionConversation.js +77 -6
- package/session/useSessionConversation.js.map +1 -1
- package/src/execution/ArtifactContentRenderer.tsx +376 -0
- package/src/execution/ArtifactPreviewModal.tsx +22 -114
- package/src/execution/ExecutionPhaseBadge.tsx +1 -1
- package/src/execution/MessageThread.tsx +35 -3
- package/src/execution/SetupProgress.tsx +120 -0
- package/src/execution/ToolCallGroup.tsx +15 -1
- package/src/execution/ToolCallItem.tsx +10 -3
- package/src/execution/artifact-utils.ts +88 -4
- package/src/execution/index.ts +9 -0
- package/src/index.ts +16 -0
- package/src/mcp-server/ApprovalPolicyGeneratorPanel.tsx +164 -0
- package/src/mcp-server/McpServerDetailView.tsx +428 -2
- package/src/mcp-server/index.ts +15 -0
- package/src/mcp-server/useDiscoverCapabilities.ts +117 -0
- package/src/mcp-server/useMcpServerCredentials.ts +108 -0
- package/src/mcp-server/useTriggerApprovalPolicySession.ts +161 -0
- package/src/session/__tests__/useSessionConversation.test.tsx +355 -2
- package/src/session/useSessionConversation.ts +104 -9
- package/styles.css +1 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
2
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
3
|
+
import { ExecutionPhase } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
|
|
3
4
|
import { isTerminalPhase } from "../execution/execution-phases";
|
|
4
5
|
import { useStigmer } from "../hooks";
|
|
5
6
|
import { useCreateAgentExecution } from "../execution/useCreateAgentExecution";
|
|
@@ -8,6 +9,10 @@ import { useSubmitApproval } from "../execution/useSubmitApproval";
|
|
|
8
9
|
import { useSession } from "./useSession";
|
|
9
10
|
import { useSessionExecutions } from "./useSessionExecutions";
|
|
10
11
|
import { useUpdateSession } from "./useUpdateSession";
|
|
12
|
+
const APPROVAL_POLL_INITIAL_MS = 3_000;
|
|
13
|
+
const APPROVAL_POLL_MAX_MS = 30_000;
|
|
14
|
+
const STALE_DISMISSAL_MS = 15_000;
|
|
15
|
+
const STALE_CHECK_INTERVAL_MS = 5_000;
|
|
11
16
|
/**
|
|
12
17
|
* Behavior hook that encapsulates the full conversation lifecycle for
|
|
13
18
|
* a session: loading data, streaming the active execution, submitting
|
|
@@ -60,7 +65,10 @@ export function useSessionConversation(sessionId, org) {
|
|
|
60
65
|
const { submitApproval: rawSubmitApproval, submittingToolCallIds, error: approvalError, clearError: clearApprovalError, } = useSubmitApproval();
|
|
61
66
|
const [pendingExecutionId, setPendingExecutionId] = useState(null);
|
|
62
67
|
const [pendingUserMessage, setPendingUserMessage] = useState(null);
|
|
63
|
-
const [
|
|
68
|
+
const [dismissedAtMap, setDismissedAtMap] = useState(new Map());
|
|
69
|
+
const dismissedAtMapRef = useRef(dismissedAtMap);
|
|
70
|
+
dismissedAtMapRef.current = dismissedAtMap;
|
|
71
|
+
const dismissedApprovalIds = useMemo(() => new Set(dismissedAtMap.keys()), [dismissedAtMap]);
|
|
64
72
|
const listActiveId = useMemo(() => {
|
|
65
73
|
for (let i = executions.length - 1; i >= 0; i--) {
|
|
66
74
|
const phase = executions[i].status?.phase;
|
|
@@ -73,7 +81,7 @@ export function useSessionConversation(sessionId, org) {
|
|
|
73
81
|
const activeExecutionId = pendingExecutionId ?? listActiveId;
|
|
74
82
|
const stream = useExecutionStream(activeExecutionId);
|
|
75
83
|
useEffect(() => {
|
|
76
|
-
|
|
84
|
+
setDismissedAtMap(new Map());
|
|
77
85
|
}, [activeExecutionId]);
|
|
78
86
|
// Clear pendingExecutionId once the execution appears in the fetched list
|
|
79
87
|
useEffect(() => {
|
|
@@ -158,13 +166,75 @@ export function useSessionConversation(sessionId, org) {
|
|
|
158
166
|
return all;
|
|
159
167
|
return all.filter((a) => !dismissedApprovalIds.has(a.toolCallId));
|
|
160
168
|
}, [activeStreamExecution, dismissedApprovalIds]);
|
|
169
|
+
// Poll-based fallback: when the execution is WAITING_FOR_APPROVAL but
|
|
170
|
+
// the server has not delivered any approval data (raw approvals empty),
|
|
171
|
+
// refetch with exponential backoff until data arrives. Checks raw
|
|
172
|
+
// (unfiltered) approvals so dismissed-but-present approvals don't
|
|
173
|
+
// trigger unnecessary network requests — that case is handled by the
|
|
174
|
+
// staleness detection below.
|
|
175
|
+
const rawApprovalCount = activeStreamExecution?.status?.pendingApprovals?.length ?? 0;
|
|
176
|
+
const approvalPollRef = useRef(null);
|
|
177
|
+
const pollAttemptRef = useRef(0);
|
|
178
|
+
useEffect(() => {
|
|
179
|
+
if (approvalPollRef.current) {
|
|
180
|
+
clearTimeout(approvalPollRef.current);
|
|
181
|
+
approvalPollRef.current = null;
|
|
182
|
+
}
|
|
183
|
+
pollAttemptRef.current = 0;
|
|
184
|
+
const isWaiting = activePhase === ExecutionPhase.EXECUTION_WAITING_FOR_APPROVAL;
|
|
185
|
+
if (!isWaiting || rawApprovalCount > 0 || !activeExecutionId)
|
|
186
|
+
return;
|
|
187
|
+
function scheduleNextPoll() {
|
|
188
|
+
const delay = Math.min(APPROVAL_POLL_INITIAL_MS * 2 ** pollAttemptRef.current, APPROVAL_POLL_MAX_MS);
|
|
189
|
+
approvalPollRef.current = setTimeout(() => {
|
|
190
|
+
pollAttemptRef.current += 1;
|
|
191
|
+
refetch();
|
|
192
|
+
scheduleNextPoll();
|
|
193
|
+
}, delay);
|
|
194
|
+
}
|
|
195
|
+
scheduleNextPoll();
|
|
196
|
+
return () => {
|
|
197
|
+
if (approvalPollRef.current) {
|
|
198
|
+
clearTimeout(approvalPollRef.current);
|
|
199
|
+
approvalPollRef.current = null;
|
|
200
|
+
}
|
|
201
|
+
};
|
|
202
|
+
}, [activePhase, rawApprovalCount, activeExecutionId, refetch]);
|
|
203
|
+
// Staleness detection: when an approval was optimistically dismissed
|
|
204
|
+
// but the execution remains in WAITING_FOR_APPROVAL longer than
|
|
205
|
+
// expected, the downstream Temporal signal may have failed. Remove
|
|
206
|
+
// stale dismissals so the card reappears and the user can retry.
|
|
207
|
+
useEffect(() => {
|
|
208
|
+
const isWaiting = activePhase === ExecutionPhase.EXECUTION_WAITING_FOR_APPROVAL;
|
|
209
|
+
if (!isWaiting || dismissedAtMap.size === 0)
|
|
210
|
+
return;
|
|
211
|
+
const id = setInterval(() => {
|
|
212
|
+
const now = Date.now();
|
|
213
|
+
const currentMap = dismissedAtMapRef.current;
|
|
214
|
+
const staleKeys = [];
|
|
215
|
+
for (const [key, ts] of currentMap) {
|
|
216
|
+
if (now - ts > STALE_DISMISSAL_MS)
|
|
217
|
+
staleKeys.push(key);
|
|
218
|
+
}
|
|
219
|
+
if (staleKeys.length === 0)
|
|
220
|
+
return;
|
|
221
|
+
setDismissedAtMap((prev) => {
|
|
222
|
+
const next = new Map(prev);
|
|
223
|
+
for (const key of staleKeys)
|
|
224
|
+
next.delete(key);
|
|
225
|
+
return next.size < prev.size ? next : prev;
|
|
226
|
+
});
|
|
227
|
+
refetch();
|
|
228
|
+
}, STALE_CHECK_INTERVAL_MS);
|
|
229
|
+
return () => clearInterval(id);
|
|
230
|
+
}, [activePhase, dismissedAtMap.size, refetch]);
|
|
161
231
|
const submitApproval = useCallback(async (toolCallId, action, comment) => {
|
|
162
232
|
if (!activeExecutionId)
|
|
163
233
|
return;
|
|
164
234
|
await rawSubmitApproval(activeExecutionId, toolCallId, action, comment);
|
|
165
|
-
|
|
166
|
-
const next = new
|
|
167
|
-
next.
|
|
235
|
+
setDismissedAtMap((prev) => {
|
|
236
|
+
const next = new Map(prev);
|
|
237
|
+
next.set(toolCallId, Date.now());
|
|
168
238
|
return next;
|
|
169
239
|
});
|
|
170
240
|
}, [activeExecutionId, rawSubmitApproval]);
|
|
@@ -176,6 +246,7 @@ export function useSessionConversation(sessionId, org) {
|
|
|
176
246
|
activeStreamExecution,
|
|
177
247
|
activePhase,
|
|
178
248
|
isStreaming: stream.isStreaming,
|
|
249
|
+
isConnecting: stream.isConnecting,
|
|
179
250
|
sendFollowUp,
|
|
180
251
|
canSendFollowUp,
|
|
181
252
|
isSending: isCreating,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSessionConversation.js","sourceRoot":"","sources":["../../src/session/useSessionConversation.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAelE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAmHtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,MAAM,UAAU,sBAAsB,CACpC,SAAwB,EACxB,GAAW;IAEX,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,EACJ,OAAO,EACP,SAAS,EAAE,cAAc,EACzB,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,cAAc,GACxB,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IAC1B,MAAM,EACJ,UAAU,EACV,SAAS,EAAE,iBAAiB,EAC5B,KAAK,EAAE,eAAe,EACtB,OAAO,GACR,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACpC,MAAM,EACJ,MAAM,EACN,UAAU,EACV,KAAK,EAAE,WAAW,EAClB,UAAU,EAAE,gBAAgB,GAC7B,GAAG,uBAAuB,EAAE,CAAC;IAC9B,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,gBAAgB,EAAE,CAAC;IACrD,MAAM,EACJ,cAAc,EAAE,iBAAiB,EACjC,qBAAqB,EACrB,KAAK,EAAE,aAAa,EACpB,UAAU,EAAE,kBAAkB,GAC/B,GAAG,iBAAiB,EAAE,CAAC;IAExB,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,QAAQ,CAC1D,IAAI,CACL,CAAC;IACF,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,QAAQ,CAC1D,IAAI,CACL,CAAC;IACF,MAAM,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,GAAG,QAAQ,CAE9D,IAAI,GAAG,EAAE,CAAC,CAAC;IAEb,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE;QAChC,KAAK,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAChD,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC;YAC1C,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnD,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,IAAI,IAAI,CAAC;YAC5C,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,MAAM,iBAAiB,GAAG,kBAAkB,IAAI,YAAY,CAAC;IAE7D,MAAM,MAAM,GAAG,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;IAErD,SAAS,CAAC,GAAG,EAAE;QACb,uBAAuB,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;IACrC,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAExB,0EAA0E;IAC1E,SAAS,CAAC,GAAG,EAAE;QACb,IACE,kBAAkB;YAClB,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,kBAAkB,CAAC,EACrE,CAAC;YACD,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,EAAE,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC,CAAC;IAErC,uEAAuE;IACvE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,kBAAkB,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YAC3C,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,EAAE,CAAC,kBAAkB,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IAE3C,iEAAiE;IACjE,sEAAsE;IACtE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,iBAAiB,IAAI,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACvD,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,EAAE,CAAC,iBAAiB,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IAE/C,MAAM,mBAAmB,GAAG,OAAO,CAAC,GAAG,EAAE;QACvC,IAAI,CAAC,iBAAiB;YAAE,OAAO,UAAU,CAAC;QAC1C,OAAO,UAAU,CAAC,MAAM,CACtB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,iBAAiB,CACpD,CAAC;IACJ,CAAC,EAAE,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAEpC,MAAM,sBAAsB,GAAG,OAAO,CAAC,GAAG,EAAE;QAC1C,IAAI,CAAC,iBAAiB;YAAE,OAAO,IAAI,CAAC;QACpC,OAAO,CACL,UAAU,CAAC,IAAI,CACb,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,iBAAiB,CACpD,IAAI,IAAI,CACV,CAAC;IACJ,CAAC,EAAE,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAEpC,MAAM,qBAAqB,GAAG,MAAM,CAAC,SAAS,IAAI,sBAAsB,CAAC;IAEzE,MAAM,WAAW,GAAG,OAAO,CAAwB,GAAG,EAAE;QACtD,IAAI,CAAC,iBAAiB;YAAE,OAAO,IAAI,CAAC;QACpC,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC,EAAE,CAAC,iBAAiB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAEtC,MAAM,eAAe,GAAG,CAAC,UAAU,IAAI,iBAAiB,KAAK,IAAI,CAAC;IAElE,MAAM,gBAAgB,GAAG,OAAO,CAC9B,GAAG,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,gBAAgB,IAAI,EAAE,EAC3C,CAAC,OAAO,CAAC,CACV,CAAC;IAEF,MAAM,eAAe,GAAG,OAAO,CAC7B,GAAG,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,eAAe,IAAI,EAAE,EAC1C,CAAC,OAAO,CAAC,CACV,CAAC;IAEF,MAAM,SAAS,GAAG,OAAO,CACvB,GAAG,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,IAAI,EAAE,EACpC,CAAC,OAAO,CAAC,CACV,CAAC;IAEF,MAAM,YAAY,GAAG,WAAW,CAC9B,KAAK,EAAE,OAAe,EAAE,OAA6B,EAAiB,EAAE;QACtE,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO;YAAE,OAAO;QAEnC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAE/B,IAAI,CAAC;YACH,MAAM,kBAAkB,GACtB,OAAO,EAAE,eAAe,KAAK,SAAS;gBACtC,OAAO,EAAE,gBAAgB,KAAK,SAAS;gBACvC,OAAO,EAAE,eAAe,KAAK,SAAS;gBACtC,OAAO,EAAE,SAAS,KAAK,SAAS,CAAC;YAEnC,IAAI,kBAAkB,EAAE,CAAC;gBACvB,iEAAiE;gBACjE,iEAAiE;gBACjE,yCAAyC;gBACzC,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBAC1D,MAAM,aAAa,CACjB,gBAAgB,CAAC,YAAY,EAAE;oBAC7B,eAAe,EAAE,OAAO,EAAE,eAAe;oBACzC,gBAAgB,EAAE,OAAO,EAAE,gBAAgB;oBAC3C,eAAe,EAAE,OAAO,EAAE,eAAe;oBACzC,SAAS,EAAE,OAAO,EAAE,SAAS;iBAC9B,CAAC,CACH,CAAC;gBACF,cAAc,EAAE,CAAC;YACnB,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC;gBAC1B,GAAG;gBACH,SAAS;gBACT,OAAO;gBACP,SAAS,EAAE,OAAO,EAAE,SAAS;gBAC7B,UAAU,EAAE,OAAO,EAAE,UAAU;gBAC/B,WAAW,EAAE,OAAO,EAAE,WAAW;aAClC,CAAC,CAAC;YACH,qBAAqB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAC1C,OAAO,EAAE,CAAC;QACZ,CAAC;QAAC,MAAM,CAAC;YACP,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,EACD,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,cAAc,CAAC,CACnF,CAAC;IAEF,MAAM,gBAAgB,GAAG,OAAO,CAA6B,GAAG,EAAE;QAChE,MAAM,GAAG,GAAG,qBAAqB,EAAE,MAAM,EAAE,gBAAgB,IAAI,EAAE,CAAC;QAClE,IAAI,oBAAoB,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,GAAG,CAAC;QAChD,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IACpE,CAAC,EAAE,CAAC,qBAAqB,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAElD,MAAM,cAAc,GAAG,WAAW,CAChC,KAAK,EACH,UAAkB,EAClB,MAAsB,EACtB,OAAgB,EACD,EAAE;QACjB,IAAI,CAAC,iBAAiB;YAAE,OAAO;QAC/B,MAAM,iBAAiB,CAAC,iBAAiB,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACxE,uBAAuB,CAAC,CAAC,IAAI,EAAE,EAAE;YAC/B,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC,EACD,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CACvC,CAAC;IAEF,MAAM,SAAS,GAAG,cAAc,IAAI,iBAAiB,CAAC;IACtD,MAAM,SAAS,GAAG,YAAY,IAAI,eAAe,CAAC;IAElD,OAAO;QACL,OAAO;QACP,mBAAmB;QACnB,qBAAqB;QACrB,WAAW;QACX,WAAW,EAAE,MAAM,CAAC,WAAW;QAE/B,YAAY;QACZ,eAAe;QACf,SAAS,EAAE,UAAU;QACrB,SAAS,EAAE,WAAW;QACtB,cAAc,EAAE,gBAAgB;QAEhC,kBAAkB;QAElB,gBAAgB;QAChB,eAAe;QACf,SAAS;QAET,gBAAgB;QAChB,cAAc;QACd,qBAAqB,EAAE,qBAAqB;QAC5C,oBAAoB;QACpB,aAAa;QACb,kBAAkB;QAElB,SAAS;QACT,SAAS;QAET,WAAW,EAAE,MAAM,CAAC,KAAK;QACzB,eAAe,EAAE,MAAM,CAAC,SAAS;KAClC,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,SAAS,gBAAgB,CACvB,OAAgB,EAChB,SAKC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,QAAS,CAAC;IAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAE1B,MAAM,gBAAgB,GACpB,SAAS,CAAC,gBAAgB,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAE3D,MAAM,eAAe,GACnB,SAAS,CAAC,eAAe,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAE1D,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAEpE,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,eAAe,EAAE,SAAS,CAAC,eAAe,IAAI,CAAC,IAAI,EAAE,eAAe,IAAI,SAAS,CAAC;QAClF,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,SAAS;QACnC,QAAQ,EAAE,IAAI,EAAE,QAAQ,IAAI,SAAS;QACrC,SAAS,EAAE,IAAI,EAAE,SAAS,IAAI,SAAS;QACvC,QAAQ,EACN,IAAI,EAAE,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC;YACrD,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;YACtB,CAAC,CAAC,SAAS;QACf,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS;QACzE,eAAe,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS;QACtE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;KACrD,CAAC;AACJ,CAAC;AAED,gEAAgE;AAChE,SAAS,oBAAoB,CAC3B,IAAqB;IAErB,OAAO,IAAI,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAC,CAAC,EAAuB,EAAE;QAC5D,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACxC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;YAChC,OAAO;gBACL,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,SAAS;gBACzB,MAAM,EAAE;oBACN,OAAO,EAAE;wBACP,GAAG,EAAE,CAAC,CAAC,GAAG;wBACV,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,SAAS;wBAC7B,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,SAAS;wBAC7B,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,SAAS;qBAC5B;iBACF;aACF,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC1C,OAAO;gBACL,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,SAAS;gBACzB,MAAM,EAAE;oBACN,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,SAAS,EAAE;iBAC7D;aACF,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,gEAAgE;AAChE,SAAS,oBAAoB,CAC3B,IAAqB;IAErB,OAAO,IAAI,EAAE,eAAe,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxC,YAAY,EAAE;YACZ,GAAG,EAAE,CAAC,CAAC,YAAY,EAAE,GAAG,IAAI,EAAE;YAC9B,IAAI,EAAE,CAAC,CAAC,YAAY,EAAE,IAAI,IAAI,EAAE;YAChC,OAAO,EAAE,CAAC,CAAC,YAAY,EAAE,OAAO,IAAI,SAAS;YAC7C,IAAI,EAAE,CAAC,CAAC,YAAY,EAAE,IAAI;SAC3B;QACD,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS;QACtE,qBAAqB,EAAE,CAAC,CAAC,qBAAqB,EAAE,MAAM;YACpD,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAClC,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,SAAS;gBACjC,gBAAgB,EAAE,CAAC,CAAC,gBAAgB,IAAI,SAAS;gBACjD,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,SAAS;aAChC,CAAC,CAAC;YACL,CAAC,CAAC,SAAS;KACd,CAAC,CAAC,CAAC;AACN,CAAC;AAED,+DAA+D;AAC/D,SAAS,oBAAoB,CAC3B,IAAqB;IAErB,OAAO,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAClC,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE;QAChB,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE;QAClB,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,SAAS;QAC/B,IAAI,EAAE,CAAC,CAAC,IAAI;KACb,CAAC,CAAC,CAAC;AACN,CAAC"}
|
|
1
|
+
{"version":3,"file":"useSessionConversation.js","sourceRoot":"","sources":["../../src/session/useSessionConversation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useState, type ReactNode } from "react";
|
|
4
|
+
import Markdown from "react-markdown";
|
|
5
|
+
import { cn } from "@stigmer/theme";
|
|
6
|
+
import {
|
|
7
|
+
MARKDOWN_COMPONENTS,
|
|
8
|
+
REMARK_PLUGINS,
|
|
9
|
+
} from "../internal/markdown-components";
|
|
10
|
+
import {
|
|
11
|
+
getArtifactRenderMode,
|
|
12
|
+
type ArtifactRenderMode,
|
|
13
|
+
} from "./artifact-utils";
|
|
14
|
+
|
|
15
|
+
export interface ArtifactContentRendererProps {
|
|
16
|
+
/** The text content to render. */
|
|
17
|
+
readonly content: string;
|
|
18
|
+
/**
|
|
19
|
+
* File name used to determine the rendering strategy
|
|
20
|
+
* (e.g., `"README.md"` → markdown, `"config.yaml"` → YAML).
|
|
21
|
+
*/
|
|
22
|
+
readonly fileName: string;
|
|
23
|
+
/**
|
|
24
|
+
* Optional MIME content type from the server. Used as a fallback
|
|
25
|
+
* when the file extension is ambiguous or missing.
|
|
26
|
+
*/
|
|
27
|
+
readonly contentType?: string | null;
|
|
28
|
+
/** When `true`, shows a truncation warning below the content. */
|
|
29
|
+
readonly isTruncated?: boolean;
|
|
30
|
+
/** Additional CSS classes for the root element. */
|
|
31
|
+
readonly className?: string;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* File-type-aware content renderer for execution artifacts.
|
|
36
|
+
*
|
|
37
|
+
* Determines the rendering strategy from the file name (via
|
|
38
|
+
* {@link getArtifactRenderMode}) and dispatches to the appropriate
|
|
39
|
+
* view:
|
|
40
|
+
*
|
|
41
|
+
* - **Markdown** (`.md`, `.mdx`) — rendered HTML via `react-markdown`
|
|
42
|
+
* with themed {@link MARKDOWN_COMPONENTS}, plus a source/rendered
|
|
43
|
+
* toggle so developers can inspect the raw markup.
|
|
44
|
+
* - **YAML** (`.yaml`, `.yml`) — CSS-only syntax highlighting with
|
|
45
|
+
* key, comment, and value colorization.
|
|
46
|
+
* - **JSON** (`.json`) — pretty-printed with basic key/value coloring.
|
|
47
|
+
* - **Plain text** (all other extensions) — monospace display with
|
|
48
|
+
* line numbers.
|
|
49
|
+
*
|
|
50
|
+
* All visual properties flow through `--stgm-*` tokens. The component
|
|
51
|
+
* is self-contained and works identically in the Stigmer Console and
|
|
52
|
+
* in a third-party host application.
|
|
53
|
+
*
|
|
54
|
+
* Platform builders who want to render artifact content outside of
|
|
55
|
+
* {@link ArtifactPreviewModal} can import this component directly:
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* ```tsx
|
|
59
|
+
* import { ArtifactContentRenderer, useArtifactContent } from "@stigmer/react";
|
|
60
|
+
*
|
|
61
|
+
* function MyArtifactPanel({ executionId, storageKey, fileName }) {
|
|
62
|
+
* const { content } = useArtifactContent(executionId, storageKey);
|
|
63
|
+
* if (!content) return null;
|
|
64
|
+
* return <ArtifactContentRenderer content={content} fileName={fileName} />;
|
|
65
|
+
* }
|
|
66
|
+
* ```
|
|
67
|
+
*
|
|
68
|
+
* @see {@link getArtifactRenderMode} — pure utility for mode detection
|
|
69
|
+
* @see {@link ArtifactPreviewModal} — full modal that composes this component
|
|
70
|
+
* @see {@link useArtifactContent} — headless content-fetching hook
|
|
71
|
+
*/
|
|
72
|
+
export function ArtifactContentRenderer({
|
|
73
|
+
content,
|
|
74
|
+
fileName,
|
|
75
|
+
contentType,
|
|
76
|
+
isTruncated = false,
|
|
77
|
+
className,
|
|
78
|
+
}: ArtifactContentRendererProps) {
|
|
79
|
+
const mode = getArtifactRenderMode(fileName, contentType);
|
|
80
|
+
|
|
81
|
+
return (
|
|
82
|
+
<div className={cn(className)}>
|
|
83
|
+
{mode === "markdown" ? (
|
|
84
|
+
<MarkdownView content={content} />
|
|
85
|
+
) : mode === "yaml" ? (
|
|
86
|
+
<YamlView content={content} />
|
|
87
|
+
) : mode === "json" ? (
|
|
88
|
+
<JsonView content={content} />
|
|
89
|
+
) : (
|
|
90
|
+
<PlainTextView content={content} />
|
|
91
|
+
)}
|
|
92
|
+
|
|
93
|
+
{isTruncated && <TruncationWarning />}
|
|
94
|
+
</div>
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// ---------------------------------------------------------------------------
|
|
99
|
+
// Markdown view with source/rendered toggle
|
|
100
|
+
// ---------------------------------------------------------------------------
|
|
101
|
+
|
|
102
|
+
type MarkdownTab = "rendered" | "source";
|
|
103
|
+
|
|
104
|
+
function MarkdownView({ content }: { readonly content: string }) {
|
|
105
|
+
const [tab, setTab] = useState<MarkdownTab>("rendered");
|
|
106
|
+
|
|
107
|
+
return (
|
|
108
|
+
<div>
|
|
109
|
+
<div className="flex items-center border-b border-border px-4 py-1.5">
|
|
110
|
+
<div
|
|
111
|
+
className="inline-flex rounded-md bg-muted p-0.5"
|
|
112
|
+
role="tablist"
|
|
113
|
+
aria-label="View mode"
|
|
114
|
+
>
|
|
115
|
+
<TabButton
|
|
116
|
+
active={tab === "rendered"}
|
|
117
|
+
onClick={() => setTab("rendered")}
|
|
118
|
+
label="Rendered"
|
|
119
|
+
/>
|
|
120
|
+
<TabButton
|
|
121
|
+
active={tab === "source"}
|
|
122
|
+
onClick={() => setTab("source")}
|
|
123
|
+
label="Source"
|
|
124
|
+
/>
|
|
125
|
+
</div>
|
|
126
|
+
</div>
|
|
127
|
+
|
|
128
|
+
{tab === "rendered" ? (
|
|
129
|
+
<div className="p-5">
|
|
130
|
+
<Markdown
|
|
131
|
+
remarkPlugins={REMARK_PLUGINS}
|
|
132
|
+
components={MARKDOWN_COMPONENTS}
|
|
133
|
+
>
|
|
134
|
+
{content}
|
|
135
|
+
</Markdown>
|
|
136
|
+
</div>
|
|
137
|
+
) : (
|
|
138
|
+
<LineNumberedPre content={content} />
|
|
139
|
+
)}
|
|
140
|
+
</div>
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
function TabButton({
|
|
145
|
+
active,
|
|
146
|
+
onClick,
|
|
147
|
+
label,
|
|
148
|
+
}: {
|
|
149
|
+
readonly active: boolean;
|
|
150
|
+
readonly onClick: () => void;
|
|
151
|
+
readonly label: string;
|
|
152
|
+
}) {
|
|
153
|
+
return (
|
|
154
|
+
<button
|
|
155
|
+
type="button"
|
|
156
|
+
role="tab"
|
|
157
|
+
aria-selected={active}
|
|
158
|
+
onClick={onClick}
|
|
159
|
+
className={cn(
|
|
160
|
+
"rounded-sm px-2.5 py-1 text-xs font-medium transition-colors",
|
|
161
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
162
|
+
active
|
|
163
|
+
? "bg-background text-foreground shadow-sm"
|
|
164
|
+
: "text-muted-foreground hover:text-foreground",
|
|
165
|
+
)}
|
|
166
|
+
>
|
|
167
|
+
{label}
|
|
168
|
+
</button>
|
|
169
|
+
);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// ---------------------------------------------------------------------------
|
|
173
|
+
// YAML view (CSS-only syntax highlighting, zero dependencies)
|
|
174
|
+
// ---------------------------------------------------------------------------
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Applies lightweight CSS-only highlighting to YAML content.
|
|
178
|
+
*
|
|
179
|
+
* Processes content line-by-line, wrapping structural tokens in styled
|
|
180
|
+
* `<span>` elements using `--stgm-*` theme tokens:
|
|
181
|
+
*
|
|
182
|
+
* - Keys → `text-primary`
|
|
183
|
+
* - Comments → `text-muted-foreground italic`
|
|
184
|
+
* - Document separators (`---`) → `text-muted-foreground`
|
|
185
|
+
* - Boolean/null values → `font-medium`
|
|
186
|
+
* - Multi-line scalar indicators → `text-muted-foreground`
|
|
187
|
+
*
|
|
188
|
+
* Values and block scalar content render in the default `text-foreground`.
|
|
189
|
+
*/
|
|
190
|
+
function highlightYaml(content: string): ReactNode {
|
|
191
|
+
return content.split("\n").map((line, i) => (
|
|
192
|
+
<span key={i}>
|
|
193
|
+
{i > 0 && "\n"}
|
|
194
|
+
{highlightYamlLine(line)}
|
|
195
|
+
</span>
|
|
196
|
+
));
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
function highlightYamlLine(line: string): ReactNode {
|
|
200
|
+
if (!line.trim()) return line;
|
|
201
|
+
|
|
202
|
+
if (/^---\s*$/.test(line) || /^\.\.\.\s*$/.test(line)) {
|
|
203
|
+
return <span className="text-muted-foreground">{line}</span>;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
const commentMatch = line.match(/^(\s*)(#.*)$/);
|
|
207
|
+
if (commentMatch) {
|
|
208
|
+
return (
|
|
209
|
+
<>
|
|
210
|
+
{commentMatch[1]}
|
|
211
|
+
<span className="text-muted-foreground italic">{commentMatch[2]}</span>
|
|
212
|
+
</>
|
|
213
|
+
);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
const kvMatch = line.match(/^(\s*(?:-\s+)?)([\w][\w.-]*)(:(?:\s|$))(.*)/);
|
|
217
|
+
if (kvMatch) {
|
|
218
|
+
const [, indent, key, colon, value] = kvMatch;
|
|
219
|
+
return (
|
|
220
|
+
<>
|
|
221
|
+
{indent}
|
|
222
|
+
<span className="text-primary">{key}</span>
|
|
223
|
+
<span className="text-muted-foreground">{colon}</span>
|
|
224
|
+
{value ? highlightYamlValue(value) : null}
|
|
225
|
+
</>
|
|
226
|
+
);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
return <>{line}</>;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
function highlightYamlValue(value: string): ReactNode {
|
|
233
|
+
const trimmed = value.trim();
|
|
234
|
+
|
|
235
|
+
if (/^[|>][-+]?\s*$/.test(trimmed)) {
|
|
236
|
+
return <span className="text-muted-foreground">{value}</span>;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
if (/^(true|false|null|~)$/.test(trimmed)) {
|
|
240
|
+
return <span className="font-medium">{value}</span>;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
return <>{value}</>;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
function YamlView({ content }: { readonly content: string }) {
|
|
247
|
+
return (
|
|
248
|
+
<pre className="overflow-x-auto p-4 font-mono text-xs leading-relaxed text-foreground">
|
|
249
|
+
<code>{highlightYaml(content)}</code>
|
|
250
|
+
</pre>
|
|
251
|
+
);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
// ---------------------------------------------------------------------------
|
|
255
|
+
// JSON view (pretty-print + basic key coloring)
|
|
256
|
+
// ---------------------------------------------------------------------------
|
|
257
|
+
|
|
258
|
+
function highlightJson(content: string): ReactNode {
|
|
259
|
+
let formatted: string;
|
|
260
|
+
try {
|
|
261
|
+
formatted = JSON.stringify(JSON.parse(content), null, 2);
|
|
262
|
+
} catch {
|
|
263
|
+
formatted = content;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
return formatted.split("\n").map((line, i) => {
|
|
267
|
+
const keyMatch = line.match(/^(\s*)"([^"]+)"(\s*:)(.*)/);
|
|
268
|
+
if (keyMatch) {
|
|
269
|
+
const [, indent, key, colon, rest] = keyMatch;
|
|
270
|
+
return (
|
|
271
|
+
<span key={i}>
|
|
272
|
+
{i > 0 && "\n"}
|
|
273
|
+
{indent}
|
|
274
|
+
<span className="text-primary">"{key}"</span>
|
|
275
|
+
<span className="text-muted-foreground">{colon}</span>
|
|
276
|
+
{highlightJsonValue(rest)}
|
|
277
|
+
</span>
|
|
278
|
+
);
|
|
279
|
+
}
|
|
280
|
+
return (
|
|
281
|
+
<span key={i}>
|
|
282
|
+
{i > 0 && "\n"}
|
|
283
|
+
{line}
|
|
284
|
+
</span>
|
|
285
|
+
);
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
function highlightJsonValue(value: string): ReactNode {
|
|
290
|
+
const trimmed = value.trim().replace(/,\s*$/, "");
|
|
291
|
+
const trailingComma = value.trim().endsWith(",") ? "," : "";
|
|
292
|
+
|
|
293
|
+
if (/^".*"$/.test(trimmed)) {
|
|
294
|
+
return (
|
|
295
|
+
<>
|
|
296
|
+
{" "}
|
|
297
|
+
<span className="text-success">{trimmed}</span>
|
|
298
|
+
{trailingComma}
|
|
299
|
+
</>
|
|
300
|
+
);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
if (/^(true|false|null)$/.test(trimmed)) {
|
|
304
|
+
return (
|
|
305
|
+
<>
|
|
306
|
+
{" "}
|
|
307
|
+
<span className="font-medium">{trimmed}</span>
|
|
308
|
+
{trailingComma}
|
|
309
|
+
</>
|
|
310
|
+
);
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
if (/^-?\d/.test(trimmed)) {
|
|
314
|
+
return (
|
|
315
|
+
<>
|
|
316
|
+
{" "}
|
|
317
|
+
<span className="text-warning">{trimmed}</span>
|
|
318
|
+
{trailingComma}
|
|
319
|
+
</>
|
|
320
|
+
);
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
return <>{value}</>;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
function JsonView({ content }: { readonly content: string }) {
|
|
327
|
+
return (
|
|
328
|
+
<pre className="overflow-x-auto p-4 font-mono text-xs leading-relaxed text-foreground">
|
|
329
|
+
<code>{highlightJson(content)}</code>
|
|
330
|
+
</pre>
|
|
331
|
+
);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
// ---------------------------------------------------------------------------
|
|
335
|
+
// Plain text view (monospace + line numbers)
|
|
336
|
+
// ---------------------------------------------------------------------------
|
|
337
|
+
|
|
338
|
+
function PlainTextView({ content }: { readonly content: string }) {
|
|
339
|
+
return <LineNumberedPre content={content} />;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
function LineNumberedPre({ content }: { readonly content: string }) {
|
|
343
|
+
const lines = content.split("\n");
|
|
344
|
+
const gutterWidth = String(lines.length).length;
|
|
345
|
+
|
|
346
|
+
return (
|
|
347
|
+
<pre className="overflow-x-auto font-mono text-xs leading-relaxed text-foreground">
|
|
348
|
+
<code>
|
|
349
|
+
{lines.map((line, i) => (
|
|
350
|
+
<span key={i} className="flex">
|
|
351
|
+
<span
|
|
352
|
+
className="sticky left-0 select-none bg-background pr-4 text-right text-muted-foreground"
|
|
353
|
+
style={{ minWidth: `${gutterWidth + 2}ch` }}
|
|
354
|
+
aria-hidden="true"
|
|
355
|
+
>
|
|
356
|
+
{i + 1}
|
|
357
|
+
</span>
|
|
358
|
+
<span className="flex-1 whitespace-pre pl-2">{line || "\n"}</span>
|
|
359
|
+
</span>
|
|
360
|
+
))}
|
|
361
|
+
</code>
|
|
362
|
+
</pre>
|
|
363
|
+
);
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
// ---------------------------------------------------------------------------
|
|
367
|
+
// Shared
|
|
368
|
+
// ---------------------------------------------------------------------------
|
|
369
|
+
|
|
370
|
+
function TruncationWarning() {
|
|
371
|
+
return (
|
|
372
|
+
<div className="border-t border-border bg-warning/10 px-4 py-2 text-xs text-warning">
|
|
373
|
+
Content was truncated. Download the full file for complete content.
|
|
374
|
+
</div>
|
|
375
|
+
);
|
|
376
|
+
}
|