@stigmer/react 3.1.3 → 3.1.4
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/composer/SessionComposer.d.ts +31 -0
- package/composer/SessionComposer.d.ts.map +1 -1
- package/composer/SessionComposer.js +12 -4
- package/composer/SessionComposer.js.map +1 -1
- package/execution/ArtifactApplyButton.d.ts +25 -0
- package/execution/ArtifactApplyButton.d.ts.map +1 -0
- package/execution/ArtifactApplyButton.js +21 -0
- package/execution/ArtifactApplyButton.js.map +1 -0
- package/execution/ArtifactContentBody.d.ts +36 -0
- package/execution/ArtifactContentBody.d.ts.map +1 -0
- package/execution/ArtifactContentBody.js +62 -0
- package/execution/ArtifactContentBody.js.map +1 -0
- package/execution/ArtifactDocument.d.ts +48 -0
- package/execution/ArtifactDocument.d.ts.map +1 -0
- package/execution/ArtifactDocument.js +89 -0
- package/execution/ArtifactDocument.js.map +1 -0
- package/execution/ArtifactPreviewModal.d.ts +4 -4
- package/execution/ArtifactPreviewModal.d.ts.map +1 -1
- package/execution/ArtifactPreviewModal.js +15 -142
- package/execution/ArtifactPreviewModal.js.map +1 -1
- package/execution/ArtifactRow.d.ts +49 -0
- package/execution/ArtifactRow.d.ts.map +1 -0
- package/execution/ArtifactRow.js +56 -0
- package/execution/ArtifactRow.js.map +1 -0
- package/execution/ArtifactsWidget.d.ts +6 -9
- package/execution/ArtifactsWidget.d.ts.map +1 -1
- package/execution/ArtifactsWidget.js +15 -19
- package/execution/ArtifactsWidget.js.map +1 -1
- package/execution/index.d.ts +8 -2
- package/execution/index.d.ts.map +1 -1
- package/execution/index.js +4 -1
- package/execution/index.js.map +1 -1
- package/execution/useArtifactContent.d.ts +6 -1
- package/execution/useArtifactContent.d.ts.map +1 -1
- package/execution/useArtifactContent.js +7 -2
- package/execution/useArtifactContent.js.map +1 -1
- package/execution/useArtifactInspection.d.ts +85 -0
- package/execution/useArtifactInspection.d.ts.map +1 -0
- package/execution/useArtifactInspection.js +143 -0
- package/execution/useArtifactInspection.js.map +1 -0
- package/execution/useCreateAgentExecution.d.ts +11 -0
- package/execution/useCreateAgentExecution.d.ts.map +1 -1
- package/execution/useCreateAgentExecution.js +1 -0
- package/execution/useCreateAgentExecution.js.map +1 -1
- package/index.d.ts +3 -3
- package/index.d.ts.map +1 -1
- package/index.js +2 -2
- package/index.js.map +1 -1
- package/internal/MermaidDiagram.d.ts +47 -0
- package/internal/MermaidDiagram.d.ts.map +1 -0
- package/internal/MermaidDiagram.js +118 -0
- package/internal/MermaidDiagram.js.map +1 -0
- package/internal/markdown-components.d.ts.map +1 -1
- package/internal/markdown-components.js +34 -0
- package/internal/markdown-components.js.map +1 -1
- package/internal/mermaid-loader.d.ts +26 -0
- package/internal/mermaid-loader.d.ts.map +1 -0
- package/internal/mermaid-loader.js +34 -0
- package/internal/mermaid-loader.js.map +1 -0
- package/internal/mermaid-theme-css.d.ts +41 -0
- package/internal/mermaid-theme-css.d.ts.map +1 -0
- package/internal/mermaid-theme-css.js +179 -0
- package/internal/mermaid-theme-css.js.map +1 -0
- package/internal/slug.d.ts +9 -5
- package/internal/slug.d.ts.map +1 -1
- package/internal/slug.js +10 -6
- package/internal/slug.js.map +1 -1
- package/package.json +5 -4
- package/session/SessionViewer.d.ts.map +1 -1
- package/session/SessionViewer.js +91 -18
- package/session/SessionViewer.js.map +1 -1
- package/session/artifact-document.d.ts +13 -0
- package/session/artifact-document.d.ts.map +1 -0
- package/session/artifact-document.js +22 -0
- package/session/artifact-document.js.map +1 -0
- package/session/facets/ArtifactsTab.d.ts +30 -4
- package/session/facets/ArtifactsTab.d.ts.map +1 -1
- package/session/facets/ArtifactsTab.js +32 -10
- package/session/facets/ArtifactsTab.js.map +1 -1
- package/session/index.d.ts +2 -1
- package/session/index.d.ts.map +1 -1
- package/session/index.js +4 -1
- package/session/index.js.map +1 -1
- package/session/useSessionArtifacts.d.ts +17 -0
- package/session/useSessionArtifacts.d.ts.map +1 -1
- package/session/useSessionArtifacts.js +16 -5
- package/session/useSessionArtifacts.js.map +1 -1
- package/session/useSessionConversation.d.ts +17 -1
- package/session/useSessionConversation.d.ts.map +1 -1
- package/session/useSessionConversation.js +32 -4
- package/session/useSessionConversation.js.map +1 -1
- package/session/useSessionPageFlow.d.ts.map +1 -1
- package/session/useSessionPageFlow.js +1 -0
- package/session/useSessionPageFlow.js.map +1 -1
- package/session/useSessionPanel.d.ts +20 -0
- package/session/useSessionPanel.d.ts.map +1 -1
- package/session/useSessionPanel.js +13 -0
- package/session/useSessionPanel.js.map +1 -1
- package/session/useSessionRailViews.d.ts +13 -1
- package/session/useSessionRailViews.d.ts.map +1 -1
- package/session/useSessionRailViews.js +5 -3
- package/session/useSessionRailViews.js.map +1 -1
- package/src/composer/SessionComposer.tsx +69 -1
- package/src/composer/__tests__/SessionComposer-editing.test.tsx +128 -0
- package/src/execution/ArtifactApplyButton.tsx +79 -0
- package/src/execution/ArtifactContentBody.tsx +255 -0
- package/src/execution/ArtifactDocument.tsx +344 -0
- package/src/execution/ArtifactPreviewModal.tsx +39 -405
- package/src/execution/ArtifactRow.tsx +165 -0
- package/src/execution/ArtifactsWidget.tsx +24 -33
- package/src/execution/__tests__/ArtifactContentBody.test.tsx +131 -0
- package/src/execution/__tests__/ArtifactDocument.test.tsx +100 -0
- package/src/execution/__tests__/ArtifactRow.test.tsx +139 -0
- package/src/execution/__tests__/ArtifactsWidget.test.tsx +78 -0
- package/src/execution/__tests__/message-entry.test.tsx +50 -2
- package/src/execution/__tests__/useArtifactInspection.test.tsx +151 -0
- package/src/execution/__tests__/useCreateAgentExecution.test.tsx +35 -0
- package/src/execution/index.ts +14 -2
- package/src/execution/useArtifactContent.ts +7 -0
- package/src/execution/useArtifactInspection.ts +252 -0
- package/src/execution/useCreateAgentExecution.ts +12 -0
- package/src/index.ts +11 -2
- package/src/internal/MermaidDiagram.tsx +164 -0
- package/src/internal/__tests__/a11y/mermaid-theme.a11y.test.tsx +122 -0
- package/src/internal/__tests__/markdown-components.test.tsx +93 -1
- package/src/internal/__tests__/mermaid-diagram.test.tsx +282 -0
- package/src/internal/markdown-components.tsx +36 -1
- package/src/internal/mermaid-loader.ts +44 -0
- package/src/internal/mermaid-theme-css.ts +178 -0
- package/src/internal/slug.ts +10 -6
- package/src/session/SessionViewer.tsx +177 -33
- package/src/session/__tests__/SessionViewer-artifactTabs.test.tsx +210 -0
- package/src/session/__tests__/SessionViewer-editResubmit.test.tsx +233 -0
- package/src/session/__tests__/useSessionArtifacts.test.ts +57 -0
- package/src/session/__tests__/useSessionConversation.test.tsx +172 -1
- package/src/session/__tests__/useSessionPanel.test.ts +70 -1
- package/src/session/artifact-document.ts +23 -0
- package/src/session/facets/ArtifactsTab.tsx +66 -18
- package/src/session/facets/__tests__/ArtifactsTab.test.tsx +111 -47
- package/src/session/index.ts +5 -1
- package/src/session/useSessionArtifacts.ts +16 -5
- package/src/session/useSessionConversation.ts +48 -6
- package/src/session/useSessionPageFlow.ts +1 -0
- package/src/session/useSessionPanel.ts +41 -0
- package/src/session/useSessionRailViews.tsx +21 -1
- package/styles.css +1 -1
- package/execution/ArtifactCard.d.ts +0 -81
- package/execution/ArtifactCard.d.ts.map +0 -1
- package/execution/ArtifactCard.js +0 -130
- package/execution/ArtifactCard.js.map +0 -1
- package/src/execution/ArtifactCard.tsx +0 -320
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ExecutionArtifact } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/artifact_pb";
|
|
2
|
-
import {
|
|
2
|
+
import type { ApplyResourceResult } from "../library/useApplyResource.js";
|
|
3
3
|
/** Props for {@link ArtifactPreviewContent}. */
|
|
4
4
|
export interface ArtifactPreviewContentProps {
|
|
5
5
|
/** The execution artifact to preview. */
|
|
@@ -43,7 +43,7 @@ export interface ArtifactPreviewContentProps {
|
|
|
43
43
|
* it inside a `<dialog>`, modal, sheet, overlay, or inline context as
|
|
44
44
|
* needed.
|
|
45
45
|
*
|
|
46
|
-
* Orchestrates the
|
|
46
|
+
* Orchestrates the shared detection pipeline (see {@link useArtifactInspection}):
|
|
47
47
|
*
|
|
48
48
|
* - **FILE artifacts**: Fetches text content via {@link useArtifactContent},
|
|
49
49
|
* renders via {@link ArtifactContentRenderer} (markdown, YAML, JSON, or
|
|
@@ -73,7 +73,7 @@ export interface ArtifactPreviewContentProps {
|
|
|
73
73
|
* ```
|
|
74
74
|
*
|
|
75
75
|
* @see {@link ArtifactPreviewModal} — wraps this component in a native `<dialog>`
|
|
76
|
-
* @see {@link
|
|
76
|
+
* @see {@link ArtifactRow} — dense list row that triggers preview via `onOpen`
|
|
77
77
|
* @see {@link useArtifactContent} — content-fetching hook (headless alternative)
|
|
78
78
|
* @see {@link useDetectStigmerResource} — YAML resource detection (headless)
|
|
79
79
|
* @see {@link useDetectSkillPackage} — skill package detection (headless)
|
|
@@ -146,7 +146,7 @@ export interface ArtifactPreviewModalProps {
|
|
|
146
146
|
* ```
|
|
147
147
|
*
|
|
148
148
|
* @see {@link ArtifactPreviewContent} — the content component (use directly for non-dialog contexts)
|
|
149
|
-
* @see {@link
|
|
149
|
+
* @see {@link ArtifactRow} — dense list row that triggers preview via `onOpen`
|
|
150
150
|
*/
|
|
151
151
|
export declare function ArtifactPreviewModal({ artifact, executionId, org, isTerminal, open, onClose, onApplied, onImplement, className, }: ArtifactPreviewModalProps): import("react/jsx-runtime").JSX.Element;
|
|
152
152
|
//# sourceMappingURL=ArtifactPreviewModal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArtifactPreviewModal.d.ts","sourceRoot":"","sources":["../../src/execution/ArtifactPreviewModal.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kEAAkE,CAAC;
|
|
1
|
+
{"version":3,"file":"ArtifactPreviewModal.d.ts","sourceRoot":"","sources":["../../src/execution/ArtifactPreviewModal.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kEAAkE,CAAC;AAO1G,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAM1E,gDAAgD;AAChD,MAAM,WAAW,2BAA2B;IAC1C,yCAAyC;IACzC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,uDAAuD;IACvD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,8EAA8E;IAC9E,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,+CAA+C;IAC/C,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC3D;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IAClC,qDAAqD;IACrD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,wBAAgB,sBAAsB,CAAC,EACrC,QAAQ,EACR,WAAW,EACX,GAAG,EACH,UAAU,EACV,OAAO,EACP,SAAS,EACT,WAAW,EACX,SAAS,GACV,EAAE,2BAA2B,2CAgE7B;AAMD,8CAA8C;AAC9C,MAAM,WAAW,yBAAyB;IACxC,yCAAyC;IACzC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,uDAAuD;IACvD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,8EAA8E;IAC9E,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,4EAA4E;IAC5E,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,uEAAuE;IACvE,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC3D;;;;OAIG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IAClC,qDAAqD;IACrD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,QAAQ,EACR,WAAW,EACX,GAAG,EACH,UAAU,EACV,IAAI,EACJ,OAAO,EACP,SAAS,EACT,WAAW,EACX,SAAS,GACV,EAAE,yBAAyB,2CA8C3B"}
|
|
@@ -1,16 +1,12 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useCallback, useEffect, useRef
|
|
4
|
-
import { ExecutionArtifactKind } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
|
|
3
|
+
import { useCallback, useEffect, useRef } from "react";
|
|
5
4
|
import { cn } from "@stigmer/theme";
|
|
6
|
-
import { useArtifactContent } from "./useArtifactContent.js";
|
|
7
5
|
import { useArtifactDownload } from "./useArtifactDownload.js";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import { useApplyResource, } from "../library/useApplyResource.js";
|
|
13
|
-
const COPIED_FEEDBACK_MS = 2000;
|
|
6
|
+
import { formatArtifactSize } from "./artifact-utils.js";
|
|
7
|
+
import { ArtifactContentBody } from "./ArtifactContentBody.js";
|
|
8
|
+
import { ArtifactApplyButton } from "./ArtifactApplyButton.js";
|
|
9
|
+
import { useArtifactInspection } from "./useArtifactInspection.js";
|
|
14
10
|
/**
|
|
15
11
|
* Artifact preview content with detection pipeline and Apply/Push CTA.
|
|
16
12
|
*
|
|
@@ -20,7 +16,7 @@ const COPIED_FEEDBACK_MS = 2000;
|
|
|
20
16
|
* it inside a `<dialog>`, modal, sheet, overlay, or inline context as
|
|
21
17
|
* needed.
|
|
22
18
|
*
|
|
23
|
-
* Orchestrates the
|
|
19
|
+
* Orchestrates the shared detection pipeline (see {@link useArtifactInspection}):
|
|
24
20
|
*
|
|
25
21
|
* - **FILE artifacts**: Fetches text content via {@link useArtifactContent},
|
|
26
22
|
* renders via {@link ArtifactContentRenderer} (markdown, YAML, JSON, or
|
|
@@ -50,93 +46,19 @@ const COPIED_FEEDBACK_MS = 2000;
|
|
|
50
46
|
* ```
|
|
51
47
|
*
|
|
52
48
|
* @see {@link ArtifactPreviewModal} — wraps this component in a native `<dialog>`
|
|
53
|
-
* @see {@link
|
|
49
|
+
* @see {@link ArtifactRow} — dense list row that triggers preview via `onOpen`
|
|
54
50
|
* @see {@link useArtifactContent} — content-fetching hook (headless alternative)
|
|
55
51
|
* @see {@link useDetectStigmerResource} — YAML resource detection (headless)
|
|
56
52
|
* @see {@link useDetectSkillPackage} — skill package detection (headless)
|
|
57
53
|
* @see {@link useApplyResource} — apply/push behavior hook (headless)
|
|
58
54
|
*/
|
|
59
55
|
export function ArtifactPreviewContent({ artifact, executionId, org, isTerminal, onClose, onApplied, onImplement, className, }) {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
//
|
|
63
|
-
|
|
64
|
-
// ---------------------------------------------------------------------------
|
|
65
|
-
const { content, contentType, isTruncated, isLoading: isContentLoading, error: contentError, } = useArtifactContent(canFetchContent ? executionId : null, canFetchContent ? artifact.storageKey : null, undefined, artifact.contentHash || undefined);
|
|
66
|
-
const yamlDetection = useDetectStigmerResource(canFetchContent ? content : null);
|
|
67
|
-
const { detection: skillDetection, isLoading: isSkillLoading } = useDetectSkillPackage(isDirectory ? artifact : null, isDirectory ? executionId : null);
|
|
68
|
-
// ---------------------------------------------------------------------------
|
|
69
|
-
// Derived detection state
|
|
70
|
-
// ---------------------------------------------------------------------------
|
|
71
|
-
const isDetected = yamlDetection.detected || skillDetection.detected;
|
|
72
|
-
const isDetecting = (canFetchContent && isContentLoading) || (isDirectory && isSkillLoading);
|
|
73
|
-
let detectionLabel = null;
|
|
74
|
-
if (yamlDetection.detected) {
|
|
75
|
-
detectionLabel = `${yamlDetection.displayName} detected`;
|
|
76
|
-
}
|
|
77
|
-
else if (skillDetection.detected) {
|
|
78
|
-
const count = skillDetection.fileCount;
|
|
79
|
-
detectionLabel = `Skill \u00B7 ${count} ${count === 1 ? "file" : "files"}`;
|
|
80
|
-
}
|
|
81
|
-
// ---------------------------------------------------------------------------
|
|
82
|
-
// Apply state
|
|
83
|
-
// ---------------------------------------------------------------------------
|
|
84
|
-
const { applyYamlResource, pushSkillPackage, isApplying, error: applyError, clearError, } = useApplyResource();
|
|
85
|
-
const [applyResult, setApplyResult] = useState(null);
|
|
86
|
-
const handleApply = useCallback(async () => {
|
|
87
|
-
clearError();
|
|
88
|
-
try {
|
|
89
|
-
let result;
|
|
90
|
-
if (yamlDetection.detected && content) {
|
|
91
|
-
result = await applyYamlResource(content, org);
|
|
92
|
-
}
|
|
93
|
-
else if (skillDetection.detected) {
|
|
94
|
-
result = await pushSkillPackage({
|
|
95
|
-
org,
|
|
96
|
-
executionId,
|
|
97
|
-
storageKey: artifact.storageKey,
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
setApplyResult(result);
|
|
104
|
-
onApplied?.(result);
|
|
105
|
-
}
|
|
106
|
-
catch {
|
|
107
|
-
// error state managed by useApplyResource
|
|
108
|
-
}
|
|
109
|
-
}, [
|
|
110
|
-
yamlDetection.detected,
|
|
111
|
-
skillDetection.detected,
|
|
112
|
-
content,
|
|
113
|
-
org,
|
|
114
|
-
executionId,
|
|
115
|
-
artifact.storageKey,
|
|
116
|
-
applyYamlResource,
|
|
117
|
-
pushSkillPackage,
|
|
118
|
-
clearError,
|
|
56
|
+
// The whole inspect-and-act pipeline (content, detection, apply/push, copy)
|
|
57
|
+
// lives in one headless hook, shared with the editor-area ArtifactDocument so
|
|
58
|
+
// the two surfaces can never drift.
|
|
59
|
+
const inspection = useArtifactInspection(artifact, executionId, org, {
|
|
119
60
|
onApplied,
|
|
120
|
-
|
|
121
|
-
// ---------------------------------------------------------------------------
|
|
122
|
-
// Copy to clipboard
|
|
123
|
-
// ---------------------------------------------------------------------------
|
|
124
|
-
const [copied, setCopied] = useState(false);
|
|
125
|
-
const handleCopy = useCallback(() => {
|
|
126
|
-
if (!content)
|
|
127
|
-
return;
|
|
128
|
-
navigator.clipboard.writeText(content).then(() => {
|
|
129
|
-
setCopied(true);
|
|
130
|
-
setTimeout(() => setCopied(false), COPIED_FEEDBACK_MS);
|
|
131
|
-
});
|
|
132
|
-
}, [content]);
|
|
133
|
-
let ctaLabel = null;
|
|
134
|
-
if (yamlDetection.detected) {
|
|
135
|
-
ctaLabel = `Apply to ${org}`;
|
|
136
|
-
}
|
|
137
|
-
else if (skillDetection.detected) {
|
|
138
|
-
ctaLabel = `Push Skill to ${org}`;
|
|
139
|
-
}
|
|
61
|
+
});
|
|
140
62
|
// "Build" runs the plan; closing the modal lets the host's submit pipeline
|
|
141
63
|
// take over (switch to Agent + send). Single combined handler keeps the
|
|
142
64
|
// caller's contract simple ("just give me onImplement").
|
|
@@ -144,10 +66,7 @@ export function ArtifactPreviewContent({ artifact, executionId, org, isTerminal,
|
|
|
144
66
|
onImplement?.();
|
|
145
67
|
onClose();
|
|
146
68
|
}, [onImplement, onClose]);
|
|
147
|
-
|
|
148
|
-
// Render
|
|
149
|
-
// ---------------------------------------------------------------------------
|
|
150
|
-
return (_jsxs("div", { className: cn("flex max-h-[80vh] flex-col", className), children: [_jsx(ContentHeader, { artifact: artifact, isDirectory: isDirectory, detectionLabel: detectionLabel, isDetecting: isDetecting, onClose: onClose }), _jsx("div", { className: "min-h-0 flex-1 overflow-y-auto border-t border-border", children: isDirectory ? (_jsx(DirectoryContentView, { artifact: artifact, skillDetection: skillDetection })) : (_jsx(FileContentStateView, { artifact: artifact, content: content, contentType: contentType, isLoading: isContentLoading, error: contentError, isTruncated: isTruncated })) }), _jsx(ActionBar, { artifact: artifact, executionId: executionId, isDirectory: isDirectory, hasContent: content !== null, copied: copied, onCopy: handleCopy, isDetected: isDetected, ctaLabel: ctaLabel, isTerminal: isTerminal, isApplying: isApplying, applyResult: applyResult, applyError: applyError, onApply: handleApply, onImplement: onImplement ? handleImplement : undefined }), _jsx("div", { role: "status", "aria-live": "polite", "aria-atomic": "true", className: "sr-only", children: copied && "Content copied to clipboard" })] }));
|
|
69
|
+
return (_jsxs("div", { className: cn("flex max-h-[80vh] flex-col", className), children: [_jsx(ContentHeader, { artifact: artifact, isDirectory: inspection.isDirectory, detectionLabel: inspection.detectionLabel, isDetecting: inspection.isDetecting, onClose: onClose }), _jsx(ArtifactContentBody, { artifact: artifact, content: inspection.content, contentType: inspection.contentType, isLoading: inspection.isLoading, error: inspection.error, isTruncated: inspection.isTruncated, skillDetection: inspection.skillDetection, className: "min-h-0 flex-1 overflow-y-auto border-t border-border" }), _jsx(ActionBar, { artifact: artifact, executionId: executionId, isDirectory: inspection.isDirectory, hasContent: inspection.content !== null, copied: inspection.copied, onCopy: inspection.copy, isDetected: inspection.isDetected, ctaLabel: inspection.ctaLabel, isTerminal: isTerminal, isApplying: inspection.isApplying, applyResult: inspection.applyResult, applyError: inspection.applyError, onApply: inspection.apply, onImplement: onImplement ? handleImplement : undefined }), _jsx("div", { role: "status", "aria-live": "polite", "aria-atomic": "true", className: "sr-only", children: inspection.copied && "Content copied to clipboard" })] }));
|
|
151
70
|
}
|
|
152
71
|
/**
|
|
153
72
|
* Full preview modal for execution artifacts using a native `<dialog>`.
|
|
@@ -180,7 +99,7 @@ export function ArtifactPreviewContent({ artifact, executionId, org, isTerminal,
|
|
|
180
99
|
* ```
|
|
181
100
|
*
|
|
182
101
|
* @see {@link ArtifactPreviewContent} — the content component (use directly for non-dialog contexts)
|
|
183
|
-
* @see {@link
|
|
102
|
+
* @see {@link ArtifactRow} — dense list row that triggers preview via `onOpen`
|
|
184
103
|
*/
|
|
185
104
|
export function ArtifactPreviewModal({ artifact, executionId, org, isTerminal, open, onClose, onApplied, onImplement, className, }) {
|
|
186
105
|
const dialogRef = useRef(null);
|
|
@@ -212,47 +131,13 @@ function ContentHeader({ artifact, isDirectory, detectionLabel, isDetecting, onC
|
|
|
212
131
|
return (_jsxs("div", { className: "flex items-start gap-3 p-4 pb-3", children: [_jsx("span", { className: "mt-0.5 shrink-0 text-muted-foreground", children: isDirectory ? _jsx(FolderIcon, {}) : _jsx(FileIcon, {}) }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsxs("h2", { className: "truncate text-sm font-semibold text-foreground", children: [artifact.name, isDirectory && "/"] }), _jsxs("div", { className: "mt-0.5 flex flex-wrap items-center gap-2", children: [_jsx("span", { className: "text-xs tabular-nums text-muted-foreground", children: formatArtifactSize(artifact.sizeBytes) }), isDetecting && !detectionLabel && (_jsx("span", { className: "h-4 w-24 animate-pulse rounded-full bg-muted", "aria-hidden": "true" })), detectionLabel && (_jsx("span", { className: "inline-flex items-center rounded-full bg-primary-subtle px-2 py-0.5 text-xs font-medium text-primary", children: detectionLabel }))] })] }), _jsx("button", { type: "button", onClick: onClose, "aria-label": "Close preview", className: cn("shrink-0 rounded-sm p-1 text-muted-foreground transition-colors hover:text-foreground", FOCUS_RING_CLASSES), children: _jsx(CloseIcon, {}) })] }));
|
|
213
132
|
}
|
|
214
133
|
// ---------------------------------------------------------------------------
|
|
215
|
-
// FileContentStateView (internal — loading/error/empty states + renderer)
|
|
216
|
-
// ---------------------------------------------------------------------------
|
|
217
|
-
const SKELETON_LINE_WIDTHS = [85, 72, 90, 65, 78, 88, 70, 82];
|
|
218
|
-
function FileContentStateView({ artifact, content, contentType, isLoading, error, isTruncated, }) {
|
|
219
|
-
if (isLoading) {
|
|
220
|
-
return (_jsx("div", { className: "space-y-2 p-4", "aria-busy": "true", "aria-label": "Loading content", children: SKELETON_LINE_WIDTHS.map((width, i) => (_jsx("div", { className: "h-4 animate-pulse rounded bg-muted", style: { width: `${width}%` }, "aria-hidden": "true" }, i))) }));
|
|
221
|
-
}
|
|
222
|
-
if (error) {
|
|
223
|
-
return (_jsxs("div", { className: "flex flex-col items-center justify-center gap-2 p-8 text-center", children: [_jsx(ErrorAlertIcon, {}), _jsx("p", { className: "text-sm text-destructive", children: error.message })] }));
|
|
224
|
-
}
|
|
225
|
-
if (content === null) {
|
|
226
|
-
return (_jsx("div", { className: "p-8 text-center text-sm text-muted-foreground", children: "Content not available for preview." }));
|
|
227
|
-
}
|
|
228
|
-
return (_jsx(ArtifactContentRenderer, { content: content, fileName: artifact.name, contentType: contentType, isTruncated: isTruncated }));
|
|
229
|
-
}
|
|
230
|
-
// ---------------------------------------------------------------------------
|
|
231
|
-
// DirectoryContentView (internal)
|
|
232
|
-
// ---------------------------------------------------------------------------
|
|
233
|
-
function DirectoryContentView({ artifact, skillDetection, }) {
|
|
234
|
-
const entries = artifact.entries;
|
|
235
|
-
return (_jsxs("div", { className: "p-4", children: [skillDetection.detected && (_jsxs("div", { className: "mb-4 rounded-md bg-primary-subtle p-3", children: [_jsx("p", { className: "text-sm font-medium text-foreground", children: skillDetection.skillName }), skillDetection.skillDescription && (_jsx("p", { className: "mt-1 text-xs text-muted-foreground", children: skillDetection.skillDescription }))] })), entries.length > 0 ? (_jsxs("div", { children: [_jsxs("h3", { className: "mb-2 text-xs font-medium text-muted-foreground", children: ["Files (", entries.length, ")"] }), _jsx("ul", { className: "space-y-0.5", role: "list", children: entries.map((entry) => (_jsxs("li", { className: "flex items-center gap-2 rounded-sm px-2 py-1 font-mono text-xs text-foreground", children: [_jsx(EntryIcon, { name: entry }), _jsx("span", { className: "min-w-0 truncate", children: entry })] }, entry))) })] })) : (_jsx("p", { className: "text-sm text-muted-foreground", children: "File listing not available." }))] }));
|
|
236
|
-
}
|
|
237
|
-
function EntryIcon({ name }) {
|
|
238
|
-
if (name.endsWith("/"))
|
|
239
|
-
return _jsx(FolderSmallIcon, {});
|
|
240
|
-
return _jsx(FileSmallIcon, {});
|
|
241
|
-
}
|
|
242
|
-
// ---------------------------------------------------------------------------
|
|
243
134
|
// ActionBar (internal)
|
|
244
135
|
// ---------------------------------------------------------------------------
|
|
245
136
|
function ActionBar({ artifact, executionId, isDirectory, hasContent, copied, onCopy, isDetected, ctaLabel, isTerminal, isApplying, applyResult, applyError, onApply, onImplement, }) {
|
|
246
137
|
const { download, isDownloading } = useArtifactDownload(executionId);
|
|
247
138
|
return (_jsxs("div", { className: "flex items-center justify-between gap-3 border-t border-border px-4 py-3", children: [_jsxs("div", { className: "flex items-center gap-3", children: [!isDirectory && hasContent && (_jsxs("button", { type: "button", onClick: onCopy, "aria-label": copied ? "Copied to clipboard" : "Copy content", className: cn("inline-flex items-center gap-1.5 text-xs font-medium transition-colors", copied
|
|
248
139
|
? "text-success"
|
|
249
|
-
: "text-muted-foreground hover:text-foreground", FOCUS_RING_CLASSES), children: [copied ? _jsx(CheckIcon, {}) : _jsx(CopyIcon, {}), copied ? "Copied" : "Copy"] })), _jsxs("button", { type: "button", onClick: () => download(artifact.storageKey, artifact.name), disabled: isDownloading, className: cn("inline-flex items-center gap-1.5 text-xs font-medium text-muted-foreground transition-colors hover:text-foreground disabled:opacity-50", FOCUS_RING_CLASSES), children: [_jsx(DownloadIcon, {}), isDownloading ? "Preparing…" : isDirectory ? "Download ZIP" : "Download"] })] }), _jsxs("div", { className: "flex shrink-0 items-center gap-3", children: [onImplement && (_jsxs("button", { type: "button", onClick: onImplement, className: cn("inline-flex items-center gap-1.5 rounded-md px-4 py-1.5 text-xs font-medium transition-colors", "bg-primary text-primary-foreground hover:bg-primary-hover", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2"), children: [_jsx(ImplementIcon, {}), "Build"] })), applyResult ? (_jsxs("span", { className: "inline-flex items-center gap-1.5 text-xs font-medium text-success", children: [_jsx(CheckIcon, {}), "Applied ", "\u00B7", " ", applyResult.name || applyResult.kind] })) : applyError ? (_jsxs("span", { className: "inline-flex items-center gap-2", role: "alert", children: [_jsx("span", { className: "text-xs text-destructive", children: applyError.message }), _jsx("button", { type: "button", onClick: onApply, className: cn("text-xs font-medium text-destructive underline transition-colors hover:text-destructive-muted", FOCUS_RING_CLASSES), children: "Retry" })] })) : isDetected && ctaLabel ? (_jsx("span", { "data-cursor-target": "apply-resource-button", children: _jsx(
|
|
250
|
-
}
|
|
251
|
-
function ApplyButton({ label, isTerminal, isApplying, onApply, }) {
|
|
252
|
-
const canApply = isTerminal && !isApplying;
|
|
253
|
-
return (_jsx("button", { type: "button", onClick: canApply ? onApply : undefined, disabled: !canApply, "aria-busy": isApplying, className: cn("rounded-md px-4 py-1.5 text-xs font-medium transition-colors", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2", "disabled:cursor-not-allowed", canApply
|
|
254
|
-
? "bg-primary text-primary-foreground hover:bg-primary-hover"
|
|
255
|
-
: "bg-muted text-muted-foreground"), children: isApplying ? (_jsxs("span", { className: "inline-flex items-center gap-1.5", children: [_jsx(SpinnerIcon, {}), "Applying", "\u2026"] })) : (label) }));
|
|
140
|
+
: "text-muted-foreground hover:text-foreground", FOCUS_RING_CLASSES), children: [copied ? _jsx(CheckIcon, {}) : _jsx(CopyIcon, {}), copied ? "Copied" : "Copy"] })), _jsxs("button", { type: "button", onClick: () => download(artifact.storageKey, artifact.name), disabled: isDownloading, className: cn("inline-flex items-center gap-1.5 text-xs font-medium text-muted-foreground transition-colors hover:text-foreground disabled:opacity-50", FOCUS_RING_CLASSES), children: [_jsx(DownloadIcon, {}), isDownloading ? "Preparing…" : isDirectory ? "Download ZIP" : "Download"] })] }), _jsxs("div", { className: "flex shrink-0 items-center gap-3", children: [onImplement && (_jsxs("button", { type: "button", onClick: onImplement, className: cn("inline-flex items-center gap-1.5 rounded-md px-4 py-1.5 text-xs font-medium transition-colors", "bg-primary text-primary-foreground hover:bg-primary-hover", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2"), children: [_jsx(ImplementIcon, {}), "Build"] })), applyResult ? (_jsxs("span", { className: "inline-flex items-center gap-1.5 text-xs font-medium text-success", children: [_jsx(CheckIcon, {}), "Applied ", "\u00B7", " ", applyResult.name || applyResult.kind] })) : applyError ? (_jsxs("span", { className: "inline-flex items-center gap-2", role: "alert", children: [_jsx("span", { className: "text-xs text-destructive", children: applyError.message }), _jsx("button", { type: "button", onClick: onApply, className: cn("text-xs font-medium text-destructive underline transition-colors hover:text-destructive-muted", FOCUS_RING_CLASSES), children: "Retry" })] })) : isDetected && ctaLabel ? (_jsx("span", { "data-cursor-target": "apply-resource-button", children: _jsx(ArtifactApplyButton, { label: ctaLabel, isTerminal: isTerminal, isApplying: isApplying, onApply: onApply }) })) : null] })] }));
|
|
256
141
|
}
|
|
257
142
|
// ---------------------------------------------------------------------------
|
|
258
143
|
// Inline SVG icons (SDK pattern: no external icon dependency)
|
|
@@ -266,12 +151,6 @@ function FileIcon() {
|
|
|
266
151
|
function FolderIcon() {
|
|
267
152
|
return (_jsx("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: _jsx("path", { d: "M14.5 12.5C14.5 13.33 13.83 14 13 14H3C2.17 14 1.5 13.33 1.5 12.5V3.5C1.5 2.67 2.17 2 3 2H6L8 4.5H13C13.83 4.5 14.5 5.17 14.5 6V12.5Z" }) }));
|
|
268
153
|
}
|
|
269
|
-
function FileSmallIcon() {
|
|
270
|
-
return (_jsxs("svg", { width: "12", height: "12", viewBox: "0 0 14 14", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", className: "shrink-0 text-muted-foreground", "aria-hidden": "true", children: [_jsx("path", { d: "M8 1H4C3.45 1 3 1.45 3 2V12C3 12.55 3.45 13 4 13H10C10.55 13 11 12.55 11 12V4L8 1Z" }), _jsx("path", { d: "M8 1V4H11" })] }));
|
|
271
|
-
}
|
|
272
|
-
function FolderSmallIcon() {
|
|
273
|
-
return (_jsx("svg", { width: "12", height: "12", viewBox: "0 0 14 14", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", className: "shrink-0 text-muted-foreground", "aria-hidden": "true", children: _jsx("path", { d: "M13 11C13 11.55 12.55 12 12 12H2C1.45 12 1 11.55 1 11V3C1 2.45 1.45 2 2 2H5L7 4H12C12.55 4 13 4.45 13 5V11Z" }) }));
|
|
274
|
-
}
|
|
275
154
|
function CopyIcon() {
|
|
276
155
|
return (_jsxs("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", stroke: "currentColor", strokeWidth: "1.2", strokeLinecap: "round", strokeLinejoin: "round", className: "shrink-0", "aria-hidden": "true", children: [_jsx("rect", { x: "4", y: "4", width: "6.5", height: "6.5", rx: "1" }), _jsx("path", { d: "M8 4V2.5C8 1.95 7.55 1.5 7 1.5H2.5C1.95 1.5 1.5 1.95 1.5 2.5V7C1.5 7.55 1.95 8 2.5 8H4" })] }));
|
|
277
156
|
}
|
|
@@ -284,10 +163,4 @@ function ImplementIcon() {
|
|
|
284
163
|
function CheckIcon() {
|
|
285
164
|
return (_jsx("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", className: "shrink-0", "aria-hidden": "true", children: _jsx("path", { d: "M2 6.5L4.5 9L10 3" }) }));
|
|
286
165
|
}
|
|
287
|
-
function SpinnerIcon() {
|
|
288
|
-
return (_jsx("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", stroke: "currentColor", strokeWidth: "1.5", className: "shrink-0 animate-spin", "aria-hidden": "true", children: _jsx("path", { d: "M6 1.5A4.5 4.5 0 1 1 1.5 6", strokeLinecap: "round" }) }));
|
|
289
|
-
}
|
|
290
|
-
function ErrorAlertIcon() {
|
|
291
|
-
return (_jsxs("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", className: "text-destructive", "aria-hidden": "true", children: [_jsx("circle", { cx: "8", cy: "8", r: "6.5" }), _jsx("path", { d: "M8 5.5V8.5" }), _jsx("circle", { cx: "8", cy: "11", r: "0.5", fill: "currentColor", stroke: "none" })] }));
|
|
292
|
-
}
|
|
293
166
|
//# sourceMappingURL=ArtifactPreviewModal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArtifactPreviewModal.js","sourceRoot":"","sources":["../../src/execution/ArtifactPreviewModal.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ArtifactPreviewModal.js","sourceRoot":"","sources":["../../src/execution/ArtifactPreviewModal.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAEvD,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AA0CnE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,MAAM,UAAU,sBAAsB,CAAC,EACrC,QAAQ,EACR,WAAW,EACX,GAAG,EACH,UAAU,EACV,OAAO,EACP,SAAS,EACT,WAAW,EACX,SAAS,GACmB;IAC5B,4EAA4E;IAC5E,8EAA8E;IAC9E,oCAAoC;IACpC,MAAM,UAAU,GAAG,qBAAqB,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,EAAE;QACnE,SAAS;KACV,CAAC,CAAC;IAEH,2EAA2E;IAC3E,wEAAwE;IACxE,yDAAyD;IACzD,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;QACvC,WAAW,EAAE,EAAE,CAAC;QAChB,OAAO,EAAE,CAAC;IACZ,CAAC,EAAE,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;IAE3B,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,4BAA4B,EAAE,SAAS,CAAC,aACzD,KAAC,aAAa,IACZ,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,UAAU,CAAC,WAAW,EACnC,cAAc,EAAE,UAAU,CAAC,cAAc,EACzC,WAAW,EAAE,UAAU,CAAC,WAAW,EACnC,OAAO,EAAE,OAAO,GAChB,EAEF,KAAC,mBAAmB,IAClB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,UAAU,CAAC,OAAO,EAC3B,WAAW,EAAE,UAAU,CAAC,WAAW,EACnC,SAAS,EAAE,UAAU,CAAC,SAAS,EAC/B,KAAK,EAAE,UAAU,CAAC,KAAK,EACvB,WAAW,EAAE,UAAU,CAAC,WAAW,EACnC,cAAc,EAAE,UAAU,CAAC,cAAc,EACzC,SAAS,EAAC,uDAAuD,GACjE,EAEF,KAAC,SAAS,IACR,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,UAAU,CAAC,WAAW,EACnC,UAAU,EAAE,UAAU,CAAC,OAAO,KAAK,IAAI,EACvC,MAAM,EAAE,UAAU,CAAC,MAAM,EACzB,MAAM,EAAE,UAAU,CAAC,IAAI,EACvB,UAAU,EAAE,UAAU,CAAC,UAAU,EACjC,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAC7B,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,CAAC,UAAU,EACjC,WAAW,EAAE,UAAU,CAAC,WAAW,EACnC,UAAU,EAAE,UAAU,CAAC,UAAU,EACjC,OAAO,EAAE,UAAU,CAAC,KAAK,EACzB,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,GACtD,EAEF,cACE,IAAI,EAAC,QAAQ,eACH,QAAQ,iBACN,MAAM,EAClB,SAAS,EAAC,SAAS,YAElB,UAAU,CAAC,MAAM,IAAI,6BAA6B,GAC/C,IACF,CACP,CAAC;AACJ,CAAC;AA0CD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,UAAU,oBAAoB,CAAC,EACnC,QAAQ,EACR,WAAW,EACX,GAAG,EACH,UAAU,EACV,IAAI,EACJ,OAAO,EACP,SAAS,EACT,WAAW,EACX,SAAS,GACiB;IAC1B,MAAM,SAAS,GAAG,MAAM,CAAoB,IAAI,CAAC,CAAC;IAElD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC;QACjC,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,CAAC;aAAM,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChC,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;IACH,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,MAAM,YAAY,GAAG,WAAW,CAC9B,CAAC,CAAuB,EAAE,EAAE;QAC1B,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;IACZ,CAAC,EACD,CAAC,OAAO,CAAC,CACV,CAAC;IAEF,OAAO,CACL,iBACE,GAAG,EAAE,SAAS,EACd,QAAQ,EAAE,YAAY,gBACV,WAAW,QAAQ,CAAC,IAAI,EAAE,EACtC,SAAS,EAAE,EAAE,CACX,gIAAgI,EAChI,2BAA2B,EAC3B,SAAS,CACV,YAEA,IAAI,IAAI,CACP,KAAC,sBAAsB,IACrB,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,EACxB,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW,GACxB,CACH,GACM,CACV,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,yBAAyB;AACzB,8EAA8E;AAE9E,MAAM,kBAAkB,GACtB,kGAAkG,CAAC;AAErG,8EAA8E;AAC9E,2BAA2B;AAC3B,8EAA8E;AAE9E,SAAS,aAAa,CAAC,EACrB,QAAQ,EACR,WAAW,EACX,cAAc,EACd,WAAW,EACX,OAAO,GAOR;IACC,OAAO,CACL,eAAK,SAAS,EAAC,iCAAiC,aAC9C,eAAM,SAAS,EAAC,uCAAuC,YACpD,WAAW,CAAC,CAAC,CAAC,KAAC,UAAU,KAAG,CAAC,CAAC,CAAC,KAAC,QAAQ,KAAG,GACvC,EAEP,eAAK,SAAS,EAAC,gBAAgB,aAC7B,cAAI,SAAS,EAAC,gDAAgD,aAC3D,QAAQ,CAAC,IAAI,EACb,WAAW,IAAI,GAAG,IAChB,EACL,eAAK,SAAS,EAAC,0CAA0C,aACvD,eAAM,SAAS,EAAC,4CAA4C,YACzD,kBAAkB,CAAC,QAAQ,CAAC,SAAS,CAAC,GAClC,EACN,WAAW,IAAI,CAAC,cAAc,IAAI,CACjC,eACE,SAAS,EAAC,8CAA8C,iBAC5C,MAAM,GAClB,CACH,EACA,cAAc,IAAI,CACjB,eAAM,SAAS,EAAC,sGAAsG,YACnH,cAAc,GACV,CACR,IACG,IACF,EAEN,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,OAAO,gBACL,eAAe,EAC1B,SAAS,EAAE,EAAE,CACX,uFAAuF,EACvF,kBAAkB,CACnB,YAED,KAAC,SAAS,KAAG,GACN,IACL,CACP,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAE9E,SAAS,SAAS,CAAC,EACjB,QAAQ,EACR,WAAW,EACX,WAAW,EACX,UAAU,EACV,MAAM,EACN,MAAM,EACN,UAAU,EACV,QAAQ,EACR,UAAU,EACV,UAAU,EACV,WAAW,EACX,UAAU,EACV,OAAO,EACP,WAAW,GAgBZ;IACC,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACrE,OAAO,CACL,eAAK,SAAS,EAAC,0EAA0E,aACvF,eAAK,SAAS,EAAC,yBAAyB,aACrC,CAAC,WAAW,IAAI,UAAU,IAAI,CAC7B,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,MAAM,gBACH,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,cAAc,EAC3D,SAAS,EAAE,EAAE,CACX,wEAAwE,EACxE,MAAM;4BACJ,CAAC,CAAC,cAAc;4BAChB,CAAC,CAAC,6CAA6C,EACjD,kBAAkB,CACnB,aAEA,MAAM,CAAC,CAAC,CAAC,KAAC,SAAS,KAAG,CAAC,CAAC,CAAC,KAAC,QAAQ,KAAG,EACrC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,IACpB,CACV,EAED,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,EAC3D,QAAQ,EAAE,aAAa,EACvB,SAAS,EAAE,EAAE,CACX,wIAAwI,EACxI,kBAAkB,CACnB,aAED,KAAC,YAAY,KAAG,EACf,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,IAClE,IACL,EAEN,eAAK,SAAS,EAAC,kCAAkC,aAC9C,WAAW,IAAI,CACd,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,EAAE,CACX,+FAA+F,EAC/F,2DAA2D,EAC3D,qGAAqG,CACtG,aAED,KAAC,aAAa,KAAG,aAEV,CACV,EACA,WAAW,CAAC,CAAC,CAAC,CACb,gBAAM,SAAS,EAAC,mEAAmE,aACjF,KAAC,SAAS,KAAG,cACJ,QAAQ,OAAG,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI,IACnD,CACR,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CACf,gBAAM,SAAS,EAAC,gCAAgC,EAAC,IAAI,EAAC,OAAO,aAC3D,eAAM,SAAS,EAAC,0BAA0B,YACvC,UAAU,CAAC,OAAO,GACd,EACP,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,EAAE,CACX,+FAA+F,EAC/F,kBAAkB,CACnB,sBAGM,IACJ,CACR,CAAC,CAAC,CAAC,UAAU,IAAI,QAAQ,CAAC,CAAC,CAAC,CAC3B,qCAAyB,uBAAuB,YAC9C,KAAC,mBAAmB,IAClB,KAAK,EAAE,QAAQ,EACf,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,OAAO,GAChB,GACG,CACR,CAAC,CAAC,CAAC,IAAI,IACJ,IACF,CACP,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,8DAA8D;AAC9D,8EAA8E;AAE9E,SAAS,SAAS;IAChB,OAAO,CACL,eACE,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,WAAW,EAAC,KAAK,EACjB,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,iBACV,MAAM,aAElB,eAAM,CAAC,EAAC,YAAY,GAAG,EACvB,eAAM,CAAC,EAAC,YAAY,GAAG,IACnB,CACP,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ;IACf,OAAO,CACL,eACE,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,WAAW,EAAC,KAAK,EACjB,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,iBACV,MAAM,aAElB,eAAM,CAAC,EAAC,gHAAgH,GAAG,EAC3H,eAAM,CAAC,EAAC,mBAAmB,GAAG,IAC1B,CACP,CAAC;AACJ,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,CACL,cACE,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,WAAW,EAAC,KAAK,EACjB,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,iBACV,MAAM,YAElB,eAAM,CAAC,EAAC,uIAAuI,GAAG,GAC9I,CACP,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ;IACf,OAAO,CACL,eACE,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,WAAW,EAAC,KAAK,EACjB,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,EACtB,SAAS,EAAC,UAAU,iBACR,MAAM,aAElB,eAAM,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,KAAK,EAAC,KAAK,EAAC,MAAM,EAAC,KAAK,EAAC,EAAE,EAAC,GAAG,GAAG,EACpD,eAAM,CAAC,EAAC,wFAAwF,GAAG,IAC/F,CACP,CAAC;AACJ,CAAC;AAED,SAAS,YAAY;IACnB,OAAO,CACL,eACE,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,WAAW,EAAC,KAAK,EACjB,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,EACtB,SAAS,EAAC,UAAU,iBACR,MAAM,aAElB,eAAM,CAAC,EAAC,YAAY,GAAG,EACvB,eAAM,CAAC,EAAC,cAAc,GAAG,EACzB,eAAM,CAAC,EAAC,YAAY,GAAG,IACnB,CACP,CAAC;AACJ,CAAC;AAED,SAAS,aAAa;IACpB,OAAO,CACL,cACE,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,WAAW,EAAC,KAAK,EACjB,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,EACtB,SAAS,EAAC,UAAU,iBACR,MAAM,YAElB,eAAM,CAAC,EAAC,oBAAoB,GAAG,GAC3B,CACP,CAAC;AACJ,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CACL,cACE,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,WAAW,EAAC,KAAK,EACjB,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,EACtB,SAAS,EAAC,UAAU,iBACR,MAAM,YAElB,eAAM,CAAC,EAAC,mBAAmB,GAAG,GAC1B,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { ExecutionArtifact } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/artifact_pb";
|
|
2
|
+
/** Props for {@link ArtifactRow}. */
|
|
3
|
+
export interface ArtifactRowProps {
|
|
4
|
+
/** The execution artifact to render. */
|
|
5
|
+
readonly artifact: ExecutionArtifact;
|
|
6
|
+
/** ID of the execution that produced this artifact — used to mint its download URL. */
|
|
7
|
+
readonly executionId: string;
|
|
8
|
+
/**
|
|
9
|
+
* When `true`, another artifact in the list shares this artifact's display
|
|
10
|
+
* `name` but has a different `sandbox_path`; the row renders the parent
|
|
11
|
+
* directory as a muted subtitle to disambiguate. Typically supplied from
|
|
12
|
+
* {@link SessionArtifactEntry.hasNameCollision}.
|
|
13
|
+
*/
|
|
14
|
+
readonly hasNameCollision?: boolean;
|
|
15
|
+
/** Single click / Enter / Space: open the artifact (a preview tab, or a modal). */
|
|
16
|
+
readonly onOpen: () => void;
|
|
17
|
+
/**
|
|
18
|
+
* Double click: promote the artifact to a persistent (pinned) tab. Mirrors the
|
|
19
|
+
* file tree's `onOpenFile` (preview) / `onActivateFile` (pin) split — the
|
|
20
|
+
* leading single click of the double click has already opened the preview, so
|
|
21
|
+
* this promotes it. Omit in panel-less hosts (e.g. the modal-only widget):
|
|
22
|
+
* with no handler the row binds no `onDoubleClick`, so a double click is just
|
|
23
|
+
* two harmless single clicks, exactly as `FileTreeNode` behaves.
|
|
24
|
+
*/
|
|
25
|
+
readonly onActivate?: () => void;
|
|
26
|
+
/** Additional CSS classes for the row's `<li>`. */
|
|
27
|
+
readonly className?: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* One dense, VS Code-style artifact row: a full-width open button (shared
|
|
31
|
+
* file-type icon + name + optional collision subtitle + size) with a sibling,
|
|
32
|
+
* hover/focus-revealed Download button.
|
|
33
|
+
*
|
|
34
|
+
* The open target and the Download control are SIBLINGS, never nested — a
|
|
35
|
+
* `<button>` inside a `<button>` is an axe `nested-interactive` (WCAG 4.1.2)
|
|
36
|
+
* violation. This mirrors `ExplorerRoot`'s header + remove-control pattern.
|
|
37
|
+
*
|
|
38
|
+
* Deliberately execution-pure and presentational: it takes only the artifact,
|
|
39
|
+
* its `executionId`, and open/activate closures — no session-domain types and
|
|
40
|
+
* no content fetch (resource detection and Apply/Push live in the opened
|
|
41
|
+
* document/modal, not the list). The two hosts — the session panel's
|
|
42
|
+
* `ArtifactsTab` facet and the panel-less {@link ArtifactsWidget} — map
|
|
43
|
+
* their entries onto these props and own the behavior wiring.
|
|
44
|
+
*
|
|
45
|
+
* @see ArtifactsTab — session-panel facet (rows open editor-pane document tabs)
|
|
46
|
+
* @see ArtifactsWidget — panel-less embeddable (rows open the preview modal)
|
|
47
|
+
*/
|
|
48
|
+
export declare function ArtifactRow({ artifact, executionId, hasNameCollision, onOpen, onActivate, className, }: ArtifactRowProps): import("react/jsx-runtime").JSX.Element;
|
|
49
|
+
//# sourceMappingURL=ArtifactRow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArtifactRow.d.ts","sourceRoot":"","sources":["../../src/execution/ArtifactRow.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kEAAkE,CAAC;AAO1G,qCAAqC;AACrC,MAAM,WAAW,gBAAgB;IAC/B,wCAAwC;IACxC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,uFAAuF;IACvF,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B;;;;;OAKG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IACpC,mFAAmF;IACnF,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC;IAC5B;;;;;;;OAOG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACjC,mDAAmD;IACnD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,WAAW,EACX,gBAAwB,EACxB,MAAM,EACN,UAAU,EACV,SAAS,GACV,EAAE,gBAAgB,2CA+DlB"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { ExecutionArtifactKind } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
|
|
4
|
+
import { cn } from "@stigmer/theme";
|
|
5
|
+
import { FileTypeIcon, FolderTypeIcon } from "../internal/file-icons/index.js";
|
|
6
|
+
import { useArtifactDownload } from "./useArtifactDownload.js";
|
|
7
|
+
import { formatArtifactSize } from "./artifact-utils.js";
|
|
8
|
+
/**
|
|
9
|
+
* One dense, VS Code-style artifact row: a full-width open button (shared
|
|
10
|
+
* file-type icon + name + optional collision subtitle + size) with a sibling,
|
|
11
|
+
* hover/focus-revealed Download button.
|
|
12
|
+
*
|
|
13
|
+
* The open target and the Download control are SIBLINGS, never nested — a
|
|
14
|
+
* `<button>` inside a `<button>` is an axe `nested-interactive` (WCAG 4.1.2)
|
|
15
|
+
* violation. This mirrors `ExplorerRoot`'s header + remove-control pattern.
|
|
16
|
+
*
|
|
17
|
+
* Deliberately execution-pure and presentational: it takes only the artifact,
|
|
18
|
+
* its `executionId`, and open/activate closures — no session-domain types and
|
|
19
|
+
* no content fetch (resource detection and Apply/Push live in the opened
|
|
20
|
+
* document/modal, not the list). The two hosts — the session panel's
|
|
21
|
+
* `ArtifactsTab` facet and the panel-less {@link ArtifactsWidget} — map
|
|
22
|
+
* their entries onto these props and own the behavior wiring.
|
|
23
|
+
*
|
|
24
|
+
* @see ArtifactsTab — session-panel facet (rows open editor-pane document tabs)
|
|
25
|
+
* @see ArtifactsWidget — panel-less embeddable (rows open the preview modal)
|
|
26
|
+
*/
|
|
27
|
+
export function ArtifactRow({ artifact, executionId, hasNameCollision = false, onOpen, onActivate, className, }) {
|
|
28
|
+
const isDirectory = artifact.kind === ExecutionArtifactKind.DIRECTORY;
|
|
29
|
+
const { download, isDownloading } = useArtifactDownload(executionId);
|
|
30
|
+
const parentDir = hasNameCollision && artifact.sandboxPath
|
|
31
|
+
? parentDirectory(artifact.sandboxPath)
|
|
32
|
+
: null;
|
|
33
|
+
return (_jsxs("li", { className: cn("group flex items-stretch", className), children: [_jsxs("button", { type: "button", onClick: onOpen, onDoubleClick: onActivate, title: artifact.sandboxPath || artifact.name, className: cn("flex min-w-0 flex-1 items-center gap-2 px-2 py-1 text-left text-xs text-muted-foreground transition-colors", "hover:bg-muted hover:text-foreground", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring"), children: [_jsx("span", { className: "shrink-0 text-muted-foreground", children: isDirectory ? (_jsx(FolderTypeIcon, { open: false })) : (_jsx(FileTypeIcon, { fileName: artifact.name })) }), _jsxs("span", { className: "min-w-0 flex-1 truncate text-foreground", children: [artifact.name, isDirectory && "/", parentDir && (_jsx("span", { className: "ml-1.5 text-[0.65rem] text-muted-foreground", children: parentDir }))] }), _jsx("span", { className: "shrink-0 tabular-nums text-[0.65rem] text-muted-foreground-faint", children: formatArtifactSize(artifact.sizeBytes) })] }), _jsx("button", { type: "button", onClick: () => download(artifact.storageKey, artifact.name), disabled: isDownloading, "aria-label": isDownloading
|
|
34
|
+
? `Preparing ${artifact.name}`
|
|
35
|
+
: `Download ${artifact.name}`, title: isDirectory ? "Download ZIP" : "Download", className: cn("flex shrink-0 items-center px-2 text-muted-foreground opacity-0 transition-opacity", "group-hover:opacity-100 focus-visible:opacity-100", "hover:text-foreground disabled:opacity-50", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring"), children: _jsx(DownloadIcon, {}) })] }));
|
|
36
|
+
}
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
// Helpers
|
|
39
|
+
// ---------------------------------------------------------------------------
|
|
40
|
+
/**
|
|
41
|
+
* Extracts a human-readable parent directory label from a sandbox path.
|
|
42
|
+
* Given `/workspace/configs/agent.yaml` returns `configs/`.
|
|
43
|
+
* Returns `null` when the path has no meaningful parent segment.
|
|
44
|
+
*/
|
|
45
|
+
function parentDirectory(sandboxPath) {
|
|
46
|
+
const lastSlash = sandboxPath.lastIndexOf("/");
|
|
47
|
+
if (lastSlash <= 0)
|
|
48
|
+
return null;
|
|
49
|
+
const parent = sandboxPath.slice(0, lastSlash);
|
|
50
|
+
const segment = parent.slice(parent.lastIndexOf("/") + 1);
|
|
51
|
+
return segment ? `${segment}/` : null;
|
|
52
|
+
}
|
|
53
|
+
function DownloadIcon() {
|
|
54
|
+
return (_jsxs("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", className: "shrink-0", "aria-hidden": "true", children: [_jsx("path", { d: "M6 1.5V8.5" }), _jsx("path", { d: "M3 6L6 9L9 6" }), _jsx("path", { d: "M2 10.5H10" })] }));
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=ArtifactRow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArtifactRow.js","sourceRoot":"","sources":["../../src/execution/ArtifactRow.tsx"],"names":[],"mappings":"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"}
|
|
@@ -33,19 +33,16 @@ export interface ArtifactsWidgetProps {
|
|
|
33
33
|
* a file-explorer-like view of the conversation's output — no
|
|
34
34
|
* execution/turn concepts are exposed.
|
|
35
35
|
*
|
|
36
|
-
*
|
|
37
|
-
* {@link
|
|
38
|
-
*
|
|
39
|
-
*
|
|
36
|
+
* The panel-less counterpart of the session panel's Artifacts facet: it
|
|
37
|
+
* renders the same dense {@link ArtifactRow} list, but — having no editor pane
|
|
38
|
+
* to open document tabs into — a click opens the {@link ArtifactPreviewModal}
|
|
39
|
+
* (the review-before-apply popup, and the sole home of the Apply/Push CTA).
|
|
40
|
+
* This is the embeddable path a platform builder drops into their own sidebar.
|
|
40
41
|
*
|
|
41
42
|
* Returns `null` when the executions list is empty or no execution
|
|
42
43
|
* has artifacts, matching the conditional-render pattern of
|
|
43
44
|
* {@link ExecutionProgress} and {@link UsageWidget}.
|
|
44
45
|
*
|
|
45
|
-
* Renders without card chrome — each {@link ArtifactCard} provides its
|
|
46
|
-
* own border and padding. The consumer controls the container styling
|
|
47
|
-
* (or places the widget directly in a flex/grid layout).
|
|
48
|
-
*
|
|
49
46
|
* All visual properties flow through `--stgm-*` tokens.
|
|
50
47
|
*
|
|
51
48
|
* @example
|
|
@@ -62,7 +59,7 @@ export interface ArtifactsWidgetProps {
|
|
|
62
59
|
* />
|
|
63
60
|
* ```
|
|
64
61
|
*
|
|
65
|
-
* @see {@link
|
|
62
|
+
* @see {@link ArtifactRow} — the dense row rendered per artifact
|
|
66
63
|
* @see {@link ArtifactPreviewModal} — full preview with Apply/Push CTA
|
|
67
64
|
* @see {@link useSessionArtifacts} — headless session-level artifact aggregation hook
|
|
68
65
|
* @see {@link useExecutionArtifacts} — headless single-execution artifact extraction hook
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArtifactsWidget.d.ts","sourceRoot":"","sources":["../../src/execution/ArtifactsWidget.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6DAA6D,CAAC;
|
|
1
|
+
{"version":3,"file":"ArtifactsWidget.d.ts","sourceRoot":"","sources":["../../src/execution/ArtifactsWidget.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6DAA6D,CAAC;AASlG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAE1E,yCAAyC;AACzC,MAAM,WAAW,oBAAoB;IACnC;;;;;;;;OAQG;IACH,QAAQ,CAAC,UAAU,EAAE,SAAS,cAAc,EAAE,CAAC;IAC/C,2EAA2E;IAC3E,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC3D,mDAAmD;IACnD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAgB,eAAe,CAAC,EAC9B,UAAU,EACV,GAAG,EACH,SAAS,EACT,SAAS,GACV,EAAE,oBAAoB,kDA2DtB"}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useCallback, useMemo, useState } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
|
-
import { useSessionArtifacts, } from "../session/useSessionArtifacts.js";
|
|
6
|
-
import {
|
|
5
|
+
import { useSessionArtifacts, artifactKey, } from "../session/useSessionArtifacts.js";
|
|
6
|
+
import { ArtifactRow } from "./ArtifactRow.js";
|
|
7
7
|
import { ArtifactPreviewModal } from "./ArtifactPreviewModal.js";
|
|
8
8
|
/**
|
|
9
9
|
* Right-sidebar widget that surfaces all artifacts produced during a
|
|
@@ -14,19 +14,16 @@ import { ArtifactPreviewModal } from "./ArtifactPreviewModal.js";
|
|
|
14
14
|
* a file-explorer-like view of the conversation's output — no
|
|
15
15
|
* execution/turn concepts are exposed.
|
|
16
16
|
*
|
|
17
|
-
*
|
|
18
|
-
* {@link
|
|
19
|
-
*
|
|
20
|
-
*
|
|
17
|
+
* The panel-less counterpart of the session panel's Artifacts facet: it
|
|
18
|
+
* renders the same dense {@link ArtifactRow} list, but — having no editor pane
|
|
19
|
+
* to open document tabs into — a click opens the {@link ArtifactPreviewModal}
|
|
20
|
+
* (the review-before-apply popup, and the sole home of the Apply/Push CTA).
|
|
21
|
+
* This is the embeddable path a platform builder drops into their own sidebar.
|
|
21
22
|
*
|
|
22
23
|
* Returns `null` when the executions list is empty or no execution
|
|
23
24
|
* has artifacts, matching the conditional-render pattern of
|
|
24
25
|
* {@link ExecutionProgress} and {@link UsageWidget}.
|
|
25
26
|
*
|
|
26
|
-
* Renders without card chrome — each {@link ArtifactCard} provides its
|
|
27
|
-
* own border and padding. The consumer controls the container styling
|
|
28
|
-
* (or places the widget directly in a flex/grid layout).
|
|
29
|
-
*
|
|
30
27
|
* All visual properties flow through `--stgm-*` tokens.
|
|
31
28
|
*
|
|
32
29
|
* @example
|
|
@@ -43,25 +40,24 @@ import { ArtifactPreviewModal } from "./ArtifactPreviewModal.js";
|
|
|
43
40
|
* />
|
|
44
41
|
* ```
|
|
45
42
|
*
|
|
46
|
-
* @see {@link
|
|
43
|
+
* @see {@link ArtifactRow} — the dense row rendered per artifact
|
|
47
44
|
* @see {@link ArtifactPreviewModal} — full preview with Apply/Push CTA
|
|
48
45
|
* @see {@link useSessionArtifacts} — headless session-level artifact aggregation hook
|
|
49
46
|
* @see {@link useExecutionArtifacts} — headless single-execution artifact extraction hook
|
|
50
47
|
*/
|
|
51
48
|
export function ArtifactsWidget({ executions, org, onApplied, className, }) {
|
|
52
49
|
const { artifacts, hasArtifacts, artifactCount } = useSessionArtifacts(executions);
|
|
53
|
-
// Store the
|
|
54
|
-
// the
|
|
55
|
-
//
|
|
56
|
-
//
|
|
57
|
-
// updated artifact for the same path while the modal is open.
|
|
50
|
+
// Store the artifact identity (not a snapshot of the full entry). The entry is
|
|
51
|
+
// re-derived from the live artifacts list on every render, so the modal always
|
|
52
|
+
// reflects the latest artifact version — even when a newer execution publishes
|
|
53
|
+
// an updated artifact for the same path while the modal is open.
|
|
58
54
|
const [previewKey, setPreviewKey] = useState(null);
|
|
59
55
|
const previewEntry = useMemo(() => previewKey !== null
|
|
60
|
-
? artifacts.find((e) => (e.artifact
|
|
56
|
+
? artifacts.find((e) => artifactKey(e.artifact) === previewKey) ?? null
|
|
61
57
|
: null, [previewKey, artifacts]);
|
|
62
|
-
const
|
|
58
|
+
const handleOpen = useCallback((entry) => setPreviewKey(artifactKey(entry.artifact)), []);
|
|
63
59
|
if (!hasArtifacts)
|
|
64
60
|
return null;
|
|
65
|
-
return (_jsxs("section", { "aria-label": "Artifacts", className: cn(className), children: [_jsxs("div", { className: "mb-2 flex items-center gap-2", children: [_jsx("h3", { className: "text-sm font-medium text-foreground", children: "Artifacts" }), _jsx("span", { className: "inline-flex min-w-[1.25rem] items-center justify-center rounded-full bg-muted px-1.5 text-xs tabular-nums text-muted-foreground", children: artifactCount })] }), _jsx("
|
|
61
|
+
return (_jsxs("section", { "aria-label": "Artifacts", className: cn(className), children: [_jsxs("div", { className: "mb-2 flex items-center gap-2", children: [_jsx("h3", { className: "text-sm font-medium text-foreground", children: "Artifacts" }), _jsx("span", { className: "inline-flex min-w-[1.25rem] items-center justify-center rounded-full bg-muted px-1.5 text-xs tabular-nums text-muted-foreground", children: artifactCount })] }), _jsx("ul", { role: "list", className: "flex flex-col", children: artifacts.map((entry) => (_jsx(ArtifactRow, { artifact: entry.artifact, executionId: entry.executionId, hasNameCollision: entry.hasNameCollision, onOpen: () => handleOpen(entry) }, artifactKey(entry.artifact)))) }), previewEntry && (_jsx(ArtifactPreviewModal, { artifact: previewEntry.artifact, executionId: previewEntry.executionId, org: org, isTerminal: previewEntry.isTerminal, open: true, onClose: () => setPreviewKey(null), onApplied: onApplied }))] }));
|
|
66
62
|
}
|
|
67
63
|
//# sourceMappingURL=ArtifactsWidget.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArtifactsWidget.js","sourceRoot":"","sources":["../../src/execution/ArtifactsWidget.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEvD,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACpC,OAAO,EACL,mBAAmB,
|
|
1
|
+
{"version":3,"file":"ArtifactsWidget.js","sourceRoot":"","sources":["../../src/execution/ArtifactsWidget.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEvD,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACpC,OAAO,EACL,mBAAmB,EACnB,WAAW,GAEZ,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AA4BjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,UAAU,eAAe,CAAC,EAC9B,UAAU,EACV,GAAG,EACH,SAAS,EACT,SAAS,GACY;IACrB,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,GAC9C,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAElC,+EAA+E;IAC/E,+EAA+E;IAC/E,+EAA+E;IAC/E,iEAAiE;IACjE,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAElE,MAAM,YAAY,GAAG,OAAO,CAC1B,GAAG,EAAE,CACH,UAAU,KAAK,IAAI;QACjB,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,UAAU,CAAC,IAAI,IAAI;QACvE,CAAC,CAAC,IAAI,EACV,CAAC,UAAU,EAAE,SAAS,CAAC,CACxB,CAAC;IAEF,MAAM,UAAU,GAAG,WAAW,CAC5B,CAAC,KAA2B,EAAE,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAC3E,EAAE,CACH,CAAC;IAEF,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAE/B,OAAO,CACL,iCAAoB,WAAW,EAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,aACtD,eAAK,SAAS,EAAC,8BAA8B,aAC3C,aAAI,SAAS,EAAC,qCAAqC,0BAAe,EAClE,eAAM,SAAS,EAAC,iIAAiI,YAC9I,aAAa,GACT,IACH,EAEN,aAAI,IAAI,EAAC,MAAM,EAAC,SAAS,EAAC,eAAe,YACtC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACxB,KAAC,WAAW,IAEV,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,WAAW,EAAE,KAAK,CAAC,WAAW,EAC9B,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,EACxC,MAAM,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAJ1B,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAKhC,CACH,CAAC,GACC,EAEJ,YAAY,IAAI,CACf,KAAC,oBAAoB,IACnB,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAC/B,WAAW,EAAE,YAAY,CAAC,WAAW,EACrC,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,YAAY,CAAC,UAAU,EACnC,IAAI,QACJ,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAClC,SAAS,EAAE,SAAS,GACpB,CACH,IACO,CACX,CAAC;AACJ,CAAC"}
|