@plitzi/sdk-dev-tools 0.35.8 → 0.35.9
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/CHANGELOG.md +26 -0
- package/dist/components/DevToolsPanel/tabs/ActionsViewer/ActionsViewer.d.ts +8 -1
- package/dist/components/DevToolsPanel/tabs/ActionsViewer/ActionsViewer.mjs +48 -138
- package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/ActionsToolbar/ActionsToolbar.d.ts +12 -0
- package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/ActionsToolbar/ActionsToolbar.mjs +68 -0
- package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/ActionsToolbar/index.d.ts +3 -0
- package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/ActionsToolbar/index.mjs +5 -0
- package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/DetailShell/DetailShell.d.ts +7 -0
- package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/DetailShell/DetailShell.mjs +26 -0
- package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/DetailShell/index.d.ts +3 -0
- package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/DetailShell/index.mjs +5 -0
- package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/FlowTimeline/FlowTimeline.d.ts +15 -0
- package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/FlowTimeline/FlowTimeline.mjs +29 -0
- package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/FlowTimeline/index.d.ts +3 -0
- package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/FlowTimeline/index.mjs +5 -0
- package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/PayloadView/PayloadView.d.ts +6 -0
- package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/PayloadView/PayloadView.mjs +26 -0
- package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/PayloadView/index.d.ts +3 -0
- package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/PayloadView/index.mjs +5 -0
- package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/RunDetail/RunDetail.d.ts +9 -0
- package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/RunDetail/RunDetail.mjs +140 -0
- package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/RunDetail/index.d.ts +3 -0
- package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/RunDetail/index.mjs +5 -0
- package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/RunList/RunList.d.ts +11 -0
- package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/RunList/RunList.mjs +24 -0
- package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/RunList/index.d.ts +3 -0
- package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/RunList/index.mjs +5 -0
- package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/RunRow/RunRow.d.ts +10 -0
- package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/RunRow/RunRow.mjs +88 -0
- package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/RunRow/index.d.ts +3 -0
- package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/RunRow/index.mjs +5 -0
- package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/StepRow/StepRow.d.ts +9 -0
- package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/StepRow/StepRow.mjs +57 -0
- package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/StepRow/index.d.ts +3 -0
- package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/StepRow/index.mjs +5 -0
- package/dist/components/DevToolsPanel/tabs/ActionsViewer/helpers.d.ts +53 -0
- package/dist/components/DevToolsPanel/tabs/ActionsViewer/helpers.mjs +65 -0
- package/dist/components/DevToolsPanel/tabs/Logs/categories/LogInteraction/LogInteraction.mjs +15 -15
- package/package.json +105 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,31 @@
|
|
|
1
1
|
# @plitzi/sdk-dev-tools
|
|
2
2
|
|
|
3
|
+
## 0.35.9
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Debug a server action's whole flow from the dev-tools, not just its answer.
|
|
8
|
+
|
|
9
|
+
A run now reports an OUTLINE of what it did: every step in order, with its task, how it ended, how long it took, and
|
|
10
|
+
the redacted error of the one that broke the flow — the compensation steps `flow.onFailure` ran included. It carries
|
|
11
|
+
nothing a step was given or returned, so it goes to any page whose debugging the deployment authorized (`devMode`, or
|
|
12
|
+
a space that switched dev tools on for its published site) and to no other. The full trace, with each step's results,
|
|
13
|
+
still reaches only an authoring request or a development server.
|
|
14
|
+
|
|
15
|
+
Runs the SERVER started while rendering a page — the ones feeding `runtime: 'server'` elements — reach the dev-tools
|
|
16
|
+
too, seeded into the page and added to by every `/_rsc` refresh, under the same authorization: a page nobody
|
|
17
|
+
authorized is not told they happened. A response carrying them is never cached. A run that died on its deadline now
|
|
18
|
+
reports the step it was on rather than nothing at all.
|
|
19
|
+
|
|
20
|
+
The Actions tab was rebuilt around it: filters and search over the log, a run list that names the step that broke,
|
|
21
|
+
and a detail panel with the flow's timeline, its compensation shown apart, and what the run carried in and out.
|
|
22
|
+
|
|
23
|
+
- Updated dependencies
|
|
24
|
+
- @plitzi/sdk-navigation@0.35.9
|
|
25
|
+
- @plitzi/sdk-schema@0.35.9
|
|
26
|
+
- @plitzi/sdk-shared@0.35.9
|
|
27
|
+
- @plitzi/sdk-style@0.35.9
|
|
28
|
+
|
|
3
29
|
## 0.35.8
|
|
4
30
|
|
|
5
31
|
### Patch Changes
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Every server action this page caused, including the ones it never asked for.
|
|
3
|
+
*
|
|
4
|
+
* A `detached` run has no answer to await and a `stream` returns before its frames arrive, so neither leaves a trace
|
|
5
|
+
* anywhere else; a `render` run happened before the page existed in the browser. What each shows beyond its own
|
|
6
|
+
* outcome is what the server was willing to send — the steps to a page allowed to debug them, and what those steps
|
|
7
|
+
* read and answered only to an authoring session or a dev server.
|
|
8
|
+
*/
|
|
2
9
|
declare const ActionsViewer: () => import("react").JSX.Element;
|
|
3
10
|
export default ActionsViewer;
|
|
@@ -1,147 +1,57 @@
|
|
|
1
|
-
import e from "
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
import
|
|
1
|
+
import e from "./components/ActionsToolbar/index.mjs";
|
|
2
|
+
import t from "./components/DetailShell/index.mjs";
|
|
3
|
+
import { filterRuns as n, isLive as r } from "./helpers.mjs";
|
|
4
|
+
import i from "./components/RunDetail/index.mjs";
|
|
5
|
+
import a from "./components/RunList/index.mjs";
|
|
6
|
+
import o from "@plitzi/plitzi-ui/hooks/useStorage";
|
|
7
|
+
import { useCallback as s, useMemo as c, useState as l } from "react";
|
|
8
|
+
import { jsx as u, jsxs as d } from "react/jsx-runtime";
|
|
9
|
+
import { cancelActionRun as f, useActionRuns as p, useCommonStore as m } from "@plitzi/sdk-shared/store";
|
|
6
10
|
//#region src/components/DevToolsPanel/tabs/ActionsViewer/ActionsViewer.tsx
|
|
7
|
-
var
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
11
|
+
var h = "This page is served without a Plitzi server: every action step is inert", g = () => {
|
|
12
|
+
let { runs: g, clear: _ } = p(), [v] = m("actions.endpoint"), [y, b] = o("plitzi-sdk.dev-tools.actions.filter", "all"), [x, S] = l(""), [C, w] = l(), [T, E] = l(), D = c(() => n(g, y, x), [
|
|
13
|
+
g,
|
|
14
|
+
y,
|
|
15
|
+
x
|
|
16
|
+
]), O = c(() => g.filter(r).length, [g]), k = c(() => g.find((e) => e.id === C), [g, C]), A = s((e) => {
|
|
17
|
+
w((t) => t === e ? void 0 : e), E(void 0);
|
|
18
|
+
}, []), j = s((e) => {
|
|
19
|
+
E((t) => t === e ? void 0 : e);
|
|
20
|
+
}, []), M = s((e) => f(e), []), N = s(() => {
|
|
21
|
+
_(), w(void 0), E(void 0);
|
|
22
|
+
}, [_]);
|
|
23
|
+
return /* @__PURE__ */ d("div", {
|
|
24
|
+
className: "flex h-full w-full flex-col",
|
|
19
25
|
children: [
|
|
20
|
-
/* @__PURE__ */
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
v.length,
|
|
29
|
-
" running"
|
|
30
|
-
]
|
|
31
|
-
}), /* @__PURE__ */ r("span", {
|
|
32
|
-
className: "text-xs text-zinc-500 dark:text-zinc-400",
|
|
33
|
-
children: h ? `Server actions run at ${h}` : "This page is served without a Plitzi server: every action step is inert"
|
|
34
|
-
})]
|
|
35
|
-
}), /* @__PURE__ */ r(c, {
|
|
36
|
-
size: "xs",
|
|
37
|
-
disabled: p.length === 0,
|
|
38
|
-
onClick: m,
|
|
39
|
-
children: "Clear"
|
|
40
|
-
})]
|
|
26
|
+
/* @__PURE__ */ u(e, {
|
|
27
|
+
filter: y,
|
|
28
|
+
query: x,
|
|
29
|
+
liveCount: O,
|
|
30
|
+
runCount: g.length,
|
|
31
|
+
onFilterChange: b,
|
|
32
|
+
onQueryChange: S,
|
|
33
|
+
onClear: N
|
|
41
34
|
}),
|
|
42
|
-
|
|
43
|
-
className: "
|
|
44
|
-
children:
|
|
35
|
+
v === void 0 && /* @__PURE__ */ u("div", {
|
|
36
|
+
className: "shrink-0 border-b border-amber-200 bg-amber-50 px-2 py-1 text-[10px] text-amber-700 dark:border-amber-500/30 dark:bg-amber-500/10 dark:text-amber-400",
|
|
37
|
+
children: h
|
|
45
38
|
}),
|
|
46
|
-
/* @__PURE__ */
|
|
47
|
-
className: "flex
|
|
48
|
-
children:
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
children: u(t.startedAt)
|
|
60
|
-
}),
|
|
61
|
-
/* @__PURE__ */ r("span", {
|
|
62
|
-
className: "font-medium",
|
|
63
|
-
children: t.actionId || "(no action named)"
|
|
64
|
-
}),
|
|
65
|
-
/* @__PURE__ */ r("span", {
|
|
66
|
-
className: "rounded-sm bg-zinc-100 px-1 text-[10px] uppercase dark:bg-zinc-800",
|
|
67
|
-
children: t.mode
|
|
68
|
-
}),
|
|
69
|
-
/* @__PURE__ */ r("span", {
|
|
70
|
-
className: e("ml-auto", l[t.status] ?? ""),
|
|
71
|
-
children: t.reason ?? t.status
|
|
72
|
-
}),
|
|
73
|
-
/* @__PURE__ */ r("span", {
|
|
74
|
-
className: "text-zinc-400 dark:text-zinc-500",
|
|
75
|
-
children: d(t)
|
|
76
|
-
})
|
|
77
|
-
]
|
|
78
|
-
}), f(t) && t.cancellable && /* @__PURE__ */ r(c, {
|
|
79
|
-
size: "xs",
|
|
80
|
-
intent: "secondary",
|
|
81
|
-
onClick: b(t.id),
|
|
82
|
-
children: "Cancel"
|
|
83
|
-
})]
|
|
84
|
-
}), g === t.id && /* @__PURE__ */ i("div", {
|
|
85
|
-
className: "flex flex-col gap-2 bg-zinc-50 px-3 py-2 text-xs dark:bg-zinc-800/50",
|
|
86
|
-
children: [
|
|
87
|
-
t.runId && /* @__PURE__ */ i("div", { children: [/* @__PURE__ */ r("span", {
|
|
88
|
-
className: "text-zinc-500 dark:text-zinc-400",
|
|
89
|
-
children: "Run id: "
|
|
90
|
-
}), /* @__PURE__ */ r("span", {
|
|
91
|
-
className: "font-mono",
|
|
92
|
-
children: t.runId
|
|
93
|
-
})] }),
|
|
94
|
-
t.error && /* @__PURE__ */ r("div", {
|
|
95
|
-
className: "break-words text-red-600 dark:text-red-400",
|
|
96
|
-
children: t.error
|
|
97
|
-
}),
|
|
98
|
-
/* @__PURE__ */ i("div", { children: [/* @__PURE__ */ r("div", {
|
|
99
|
-
className: "text-zinc-500 dark:text-zinc-400",
|
|
100
|
-
children: "Input"
|
|
101
|
-
}), /* @__PURE__ */ r("pre", {
|
|
102
|
-
className: "overflow-auto whitespace-pre-wrap",
|
|
103
|
-
children: JSON.stringify(t.input ?? {}, null, 2)
|
|
104
|
-
})] }),
|
|
105
|
-
t.output && /* @__PURE__ */ i("div", { children: [/* @__PURE__ */ r("div", {
|
|
106
|
-
className: "text-zinc-500 dark:text-zinc-400",
|
|
107
|
-
children: "Output"
|
|
108
|
-
}), /* @__PURE__ */ r("pre", {
|
|
109
|
-
className: "overflow-auto whitespace-pre-wrap",
|
|
110
|
-
children: JSON.stringify(t.output, null, 2)
|
|
111
|
-
})] }),
|
|
112
|
-
t.progress.length > 0 && /* @__PURE__ */ i("div", { children: [/* @__PURE__ */ i("div", {
|
|
113
|
-
className: "text-zinc-500 dark:text-zinc-400",
|
|
114
|
-
children: [
|
|
115
|
-
"Progress (",
|
|
116
|
-
t.progress.length,
|
|
117
|
-
")"
|
|
118
|
-
]
|
|
119
|
-
}), /* @__PURE__ */ r("pre", {
|
|
120
|
-
className: "overflow-auto whitespace-pre-wrap",
|
|
121
|
-
children: JSON.stringify(t.progress, null, 2)
|
|
122
|
-
})] }),
|
|
123
|
-
t.trace && /* @__PURE__ */ i("div", {
|
|
124
|
-
className: "flex flex-col gap-1",
|
|
125
|
-
children: [/* @__PURE__ */ r("div", {
|
|
126
|
-
className: "text-zinc-500 dark:text-zinc-400",
|
|
127
|
-
children: "Server steps"
|
|
128
|
-
}), t.trace.map((t, n) => {
|
|
129
|
-
let a = t.node, o = typeof t.status == "string" ? t.status : "";
|
|
130
|
-
return /* @__PURE__ */ i("div", {
|
|
131
|
-
className: "flex items-center justify-between rounded-sm border border-zinc-200 px-2 py-1 dark:border-zinc-700",
|
|
132
|
-
children: [/* @__PURE__ */ r("span", { children: a?.title ?? a?.action ?? "step" }), /* @__PURE__ */ r("span", {
|
|
133
|
-
className: e(l[o === "success" ? "completed" : "failed"]),
|
|
134
|
-
children: o
|
|
135
|
-
})]
|
|
136
|
-
}, `${String(a?.action)}-${n}`);
|
|
137
|
-
})]
|
|
138
|
-
})
|
|
139
|
-
]
|
|
140
|
-
})]
|
|
141
|
-
}, t.id))
|
|
39
|
+
/* @__PURE__ */ d("div", {
|
|
40
|
+
className: "flex min-h-0 grow",
|
|
41
|
+
children: [/* @__PURE__ */ u(a, {
|
|
42
|
+
runs: D,
|
|
43
|
+
total: g.length,
|
|
44
|
+
selectedRunId: C,
|
|
45
|
+
onSelect: A,
|
|
46
|
+
onCancel: M
|
|
47
|
+
}), k !== void 0 && /* @__PURE__ */ u(t, { children: /* @__PURE__ */ u(i, {
|
|
48
|
+
run: k,
|
|
49
|
+
selectedStepId: T,
|
|
50
|
+
onSelectStep: j
|
|
51
|
+
}) })]
|
|
142
52
|
})
|
|
143
53
|
]
|
|
144
54
|
});
|
|
145
55
|
};
|
|
146
56
|
//#endregion
|
|
147
|
-
export {
|
|
57
|
+
export { g as default };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { RunFilter } from '../../helpers';
|
|
2
|
+
export type ActionsToolbarProps = {
|
|
3
|
+
filter: RunFilter;
|
|
4
|
+
query: string;
|
|
5
|
+
liveCount: number;
|
|
6
|
+
runCount: number;
|
|
7
|
+
onFilterChange: (filter: RunFilter) => void;
|
|
8
|
+
onQueryChange: (query: string) => void;
|
|
9
|
+
onClear: () => void;
|
|
10
|
+
};
|
|
11
|
+
declare const ActionsToolbar: ({ filter, query, liveCount, runCount, onFilterChange, onQueryChange, onClear }: ActionsToolbarProps) => import("react").JSX.Element;
|
|
12
|
+
export default ActionsToolbar;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import e from "clsx";
|
|
2
|
+
import { useCallback as t } from "react";
|
|
3
|
+
import { jsx as n, jsxs as r } from "react/jsx-runtime";
|
|
4
|
+
//#region src/components/DevToolsPanel/tabs/ActionsViewer/components/ActionsToolbar/ActionsToolbar.tsx
|
|
5
|
+
var i = [
|
|
6
|
+
{
|
|
7
|
+
id: "all",
|
|
8
|
+
label: "All",
|
|
9
|
+
icon: "fa-solid fa-list"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
id: "live",
|
|
13
|
+
label: "Running",
|
|
14
|
+
icon: "fa-solid fa-circle-notch"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
id: "failed",
|
|
18
|
+
label: "Failed",
|
|
19
|
+
icon: "fa-solid fa-circle-exclamation"
|
|
20
|
+
}
|
|
21
|
+
], a = ({ filter: a, query: o, liveCount: s, runCount: c, onFilterChange: l, onQueryChange: u, onClear: d }) => {
|
|
22
|
+
let f = t((e) => () => l(e), [l]), p = t((e) => u(e.target.value), [u]);
|
|
23
|
+
return /* @__PURE__ */ r("div", {
|
|
24
|
+
className: "flex shrink-0 items-center gap-2 border-b border-zinc-200 bg-zinc-50 px-2 py-1.5 dark:border-zinc-800 dark:bg-zinc-900",
|
|
25
|
+
children: [
|
|
26
|
+
/* @__PURE__ */ n("div", {
|
|
27
|
+
className: "flex items-stretch gap-1",
|
|
28
|
+
children: i.map((t) => {
|
|
29
|
+
let i = a === t.id;
|
|
30
|
+
return /* @__PURE__ */ r("button", {
|
|
31
|
+
onClick: f(t.id),
|
|
32
|
+
"aria-pressed": i,
|
|
33
|
+
className: e("flex h-6 items-center gap-1 rounded px-2 text-xs font-medium transition-colors", {
|
|
34
|
+
"bg-violet-500 text-white": i,
|
|
35
|
+
"text-zinc-600 hover:bg-zinc-200 dark:text-zinc-400 dark:hover:bg-zinc-700": !i
|
|
36
|
+
}),
|
|
37
|
+
children: [
|
|
38
|
+
/* @__PURE__ */ n("i", { className: e(t.icon, t.id === "live" && s > 0 && "fa-spin") }),
|
|
39
|
+
t.label,
|
|
40
|
+
t.id === "live" && s > 0 && /* @__PURE__ */ n("span", {
|
|
41
|
+
className: "tabular-nums",
|
|
42
|
+
children: s
|
|
43
|
+
})
|
|
44
|
+
]
|
|
45
|
+
}, t.id);
|
|
46
|
+
})
|
|
47
|
+
}),
|
|
48
|
+
/* @__PURE__ */ n("input", {
|
|
49
|
+
type: "search",
|
|
50
|
+
value: o,
|
|
51
|
+
onChange: p,
|
|
52
|
+
placeholder: "Filter by action, step or run id",
|
|
53
|
+
className: "h-6 min-w-0 grow rounded border border-zinc-200 bg-white px-2 text-xs text-zinc-700 placeholder:text-zinc-400 dark:border-zinc-700 dark:bg-zinc-800 dark:text-zinc-200"
|
|
54
|
+
}),
|
|
55
|
+
/* @__PURE__ */ r("span", {
|
|
56
|
+
className: "shrink-0 text-[10px] text-zinc-400 tabular-nums dark:text-zinc-500",
|
|
57
|
+
children: [c, " runs"]
|
|
58
|
+
}),
|
|
59
|
+
/* @__PURE__ */ r("button", {
|
|
60
|
+
onClick: d,
|
|
61
|
+
className: "flex h-6 shrink-0 items-center gap-1 rounded px-2 text-xs font-medium text-zinc-600 hover:bg-zinc-200 dark:text-zinc-300 dark:hover:bg-zinc-700",
|
|
62
|
+
children: [/* @__PURE__ */ n("i", { className: "fa-solid fa-trash" }), "Clear"]
|
|
63
|
+
})
|
|
64
|
+
]
|
|
65
|
+
});
|
|
66
|
+
};
|
|
67
|
+
//#endregion
|
|
68
|
+
export { a as default };
|
package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/DetailShell/DetailShell.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
export type DetailShellProps = {
|
|
3
|
+
children: ReactNode;
|
|
4
|
+
};
|
|
5
|
+
/** The resizable column the selected run is inspected in; its width is remembered across sessions. */
|
|
6
|
+
declare const DetailShell: ({ children }: DetailShellProps) => import("react").JSX.Element;
|
|
7
|
+
export default DetailShell;
|
package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/DetailShell/DetailShell.mjs
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import e from "@plitzi/plitzi-ui/hooks/useStorage";
|
|
2
|
+
import { useCallback as t } from "react";
|
|
3
|
+
import { jsx as n } from "react/jsx-runtime";
|
|
4
|
+
import r from "@plitzi/plitzi-ui/ContainerResizable";
|
|
5
|
+
//#region src/components/DevToolsPanel/tabs/ActionsViewer/components/DetailShell/DetailShell.tsx
|
|
6
|
+
var i = 200, a = 520, o = 280, s = ({ children: s }) => {
|
|
7
|
+
let [c, l] = e("plitzi-sdk.dev-tools.actions.detail-width", o), u = t((e) => {
|
|
8
|
+
Number.isFinite(e) && l(e);
|
|
9
|
+
}, [l]);
|
|
10
|
+
return /* @__PURE__ */ n(r, {
|
|
11
|
+
className: "shrink-0 border-l border-zinc-200 dark:border-zinc-800",
|
|
12
|
+
resizeHandles: ["w"],
|
|
13
|
+
axis: "x",
|
|
14
|
+
autoGrow: !1,
|
|
15
|
+
width: c,
|
|
16
|
+
minConstraintsX: i,
|
|
17
|
+
maxConstraintsX: a,
|
|
18
|
+
onChange: u,
|
|
19
|
+
children: /* @__PURE__ */ n("aside", {
|
|
20
|
+
className: "flex h-full w-full flex-col gap-1.5 overflow-auto bg-zinc-50 px-3 py-2 text-[10px] dark:bg-zinc-900/50",
|
|
21
|
+
children: s
|
|
22
|
+
})
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
//#endregion
|
|
26
|
+
export { s as default };
|
package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/FlowTimeline/FlowTimeline.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ActionRunStep } from '@plitzi/sdk-shared';
|
|
2
|
+
export type FlowTimelineProps = {
|
|
3
|
+
steps: ActionRunStep[];
|
|
4
|
+
selectedStepId?: string;
|
|
5
|
+
onSelectStep: (stepId: string) => void;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* The flow as it actually ran, in order, with the compensation kept apart from it.
|
|
9
|
+
*
|
|
10
|
+
* The `undo` steps are not more of the flow: they ran BECAUSE it failed, giving back what the steps above them
|
|
11
|
+
* already did. Drawn in the same list they read as a flow that carried on after the failure, which is the opposite
|
|
12
|
+
* of what happened.
|
|
13
|
+
*/
|
|
14
|
+
declare const FlowTimeline: ({ steps, selectedStepId, onSelectStep }: FlowTimelineProps) => import("react").JSX.Element;
|
|
15
|
+
export default FlowTimeline;
|
package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/FlowTimeline/FlowTimeline.mjs
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { stepBars as e } from "../../helpers.mjs";
|
|
2
|
+
import t from "../StepRow/index.mjs";
|
|
3
|
+
import { useMemo as n } from "react";
|
|
4
|
+
import { jsx as r, jsxs as i } from "react/jsx-runtime";
|
|
5
|
+
//#region src/components/DevToolsPanel/tabs/ActionsViewer/components/FlowTimeline/FlowTimeline.tsx
|
|
6
|
+
var a = ({ steps: a, selectedStepId: o, onSelectStep: s }) => {
|
|
7
|
+
let c = n(() => e(a), [a]), l = c.filter((e) => e.step.phase === "flow"), u = c.filter((e) => e.step.phase === "undo");
|
|
8
|
+
return /* @__PURE__ */ i("div", {
|
|
9
|
+
className: "flex flex-col gap-0.5",
|
|
10
|
+
children: [
|
|
11
|
+
l.map((e) => /* @__PURE__ */ r(t, {
|
|
12
|
+
bar: e,
|
|
13
|
+
selected: e.step.id === o,
|
|
14
|
+
onSelect: s
|
|
15
|
+
}, e.step.id)),
|
|
16
|
+
u.length > 0 && /* @__PURE__ */ i("div", {
|
|
17
|
+
className: "mt-2 flex items-center gap-1.5 px-1.5 text-[10px] font-medium tracking-wide text-amber-600 uppercase dark:text-amber-400",
|
|
18
|
+
children: [/* @__PURE__ */ r("i", { className: "fa-solid fa-rotate-left" }), "Compensation"]
|
|
19
|
+
}),
|
|
20
|
+
u.map((e) => /* @__PURE__ */ r(t, {
|
|
21
|
+
bar: e,
|
|
22
|
+
selected: e.step.id === o,
|
|
23
|
+
onSelect: s
|
|
24
|
+
}, e.step.id))
|
|
25
|
+
]
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
//#endregion
|
|
29
|
+
export { a as default };
|
package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/PayloadView/PayloadView.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type PayloadViewProps = {
|
|
2
|
+
value: unknown;
|
|
3
|
+
};
|
|
4
|
+
/** What a run was given, answered, or streamed — the same reader the Store tab uses, so it reads the same. */
|
|
5
|
+
declare const PayloadView: ({ value }: PayloadViewProps) => import("react").JSX.Element;
|
|
6
|
+
export default PayloadView;
|
package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/PayloadView/PayloadView.mjs
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import e from "@plitzi/sdk-shared/theme/useTheme";
|
|
2
|
+
import { jsx as t } from "react/jsx-runtime";
|
|
3
|
+
import n from "@uiw/react-json-view";
|
|
4
|
+
import * as r from "@uiw/react-json-view/vscode";
|
|
5
|
+
//#region src/components/DevToolsPanel/tabs/ActionsViewer/components/PayloadView/PayloadView.tsx
|
|
6
|
+
var i = {
|
|
7
|
+
...r.vscodeTheme,
|
|
8
|
+
width: "100%",
|
|
9
|
+
overflow: "auto",
|
|
10
|
+
padding: "6px",
|
|
11
|
+
fontSize: "11px"
|
|
12
|
+
}, a = ({ value: r }) => {
|
|
13
|
+
let { resolvedTheme: a } = e();
|
|
14
|
+
return typeof r != "object" || !r ? /* @__PURE__ */ t("pre", {
|
|
15
|
+
className: "overflow-auto p-1.5 font-mono text-[11px] break-words whitespace-pre-wrap text-zinc-600 dark:text-zinc-300",
|
|
16
|
+
children: JSON.stringify(r)
|
|
17
|
+
}) : /* @__PURE__ */ t(n, {
|
|
18
|
+
value: r,
|
|
19
|
+
style: a === "dark" ? i : void 0,
|
|
20
|
+
enableClipboard: !1,
|
|
21
|
+
displayDataTypes: !1,
|
|
22
|
+
collapsed: 2
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
//#endregion
|
|
26
|
+
export { a as default };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ActionRunEntry } from '@plitzi/sdk-shared';
|
|
2
|
+
export type RunDetailProps = {
|
|
3
|
+
run: ActionRunEntry;
|
|
4
|
+
selectedStepId?: string;
|
|
5
|
+
onSelectStep: (stepId: string) => void;
|
|
6
|
+
};
|
|
7
|
+
/** Everything known about one run: how it ended, what it did step by step, and what it carried. */
|
|
8
|
+
declare const RunDetail: ({ run, selectedStepId, onSelectStep }: RunDetailProps) => import("react").JSX.Element;
|
|
9
|
+
export default RunDetail;
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { MODE_LABEL as e, failedStep as t, formatMs as n, formatTime as r, isLive as i, runDuration as a, statusTone as o, traceResultOf as s } from "../../helpers.mjs";
|
|
2
|
+
import c from "../FlowTimeline/index.mjs";
|
|
3
|
+
import l from "../PayloadView/index.mjs";
|
|
4
|
+
import u from "clsx";
|
|
5
|
+
import { useMemo as d } from "react";
|
|
6
|
+
import { Fragment as f, jsx as p, jsxs as m } from "react/jsx-runtime";
|
|
7
|
+
//#region src/components/DevToolsPanel/tabs/ActionsViewer/components/RunDetail/RunDetail.tsx
|
|
8
|
+
var h = {
|
|
9
|
+
info: "bg-violet-500/15 text-violet-600 dark:text-violet-400",
|
|
10
|
+
success: "bg-emerald-500/15 text-emerald-600 dark:text-emerald-400",
|
|
11
|
+
danger: "bg-red-500/15 text-red-600 dark:text-red-400",
|
|
12
|
+
warning: "bg-amber-500/15 text-amber-600 dark:text-amber-400",
|
|
13
|
+
custom: "bg-zinc-500/15 text-zinc-500 dark:text-zinc-400"
|
|
14
|
+
}, g = "This page was sent what the flow DID, not what each step read or answered. Open the action in the builder, or run the deployment in dev mode, to inspect a step.", _ = "The server did not send the steps for this run: the action is behind a session, or this page is not authorized to debug it.", v = "The flow is still running. Its steps arrive with the answer.", y = ({ run: y, selectedStepId: b, onSelectStep: x }) => {
|
|
15
|
+
let S = t(y.steps), C = a(y), w = d(() => b === void 0 ? void 0 : s(y.trace, b), [y.trace, b]);
|
|
16
|
+
return /* @__PURE__ */ m(f, { children: [
|
|
17
|
+
/* @__PURE__ */ m("div", {
|
|
18
|
+
className: "flex items-center gap-1.5",
|
|
19
|
+
children: [/* @__PURE__ */ p("span", {
|
|
20
|
+
className: "truncate text-xs font-medium text-zinc-700 dark:text-zinc-100",
|
|
21
|
+
children: y.actionId || "(no action named)"
|
|
22
|
+
}), /* @__PURE__ */ p("span", {
|
|
23
|
+
className: u("shrink-0 rounded px-1 py-0.5 text-[9px]", h[o(y.status)]),
|
|
24
|
+
children: y.reason ?? y.status
|
|
25
|
+
})]
|
|
26
|
+
}),
|
|
27
|
+
y.error !== void 0 && /* @__PURE__ */ m("div", {
|
|
28
|
+
className: "mt-1 flex flex-col gap-1 rounded border border-red-200 bg-red-50 px-2 py-1.5 dark:border-red-500/30 dark:bg-red-500/10",
|
|
29
|
+
children: [/* @__PURE__ */ m("span", {
|
|
30
|
+
className: "font-medium text-red-600 dark:text-red-400",
|
|
31
|
+
children: [/* @__PURE__ */ p("i", { className: "fa-solid fa-circle-exclamation mr-1" }), S === void 0 ? "The run failed" : `Failed at “${S.title}”`]
|
|
32
|
+
}), /* @__PURE__ */ p("span", {
|
|
33
|
+
className: "break-words text-red-700 dark:text-red-300",
|
|
34
|
+
children: y.error
|
|
35
|
+
})]
|
|
36
|
+
}),
|
|
37
|
+
/* @__PURE__ */ p("div", {
|
|
38
|
+
className: "mt-1 font-medium tracking-wide text-zinc-400 uppercase dark:text-zinc-500",
|
|
39
|
+
children: "Flow"
|
|
40
|
+
}),
|
|
41
|
+
y.steps === void 0 && /* @__PURE__ */ p("span", {
|
|
42
|
+
className: "text-zinc-400 italic dark:text-zinc-500",
|
|
43
|
+
children: i(y) ? v : _
|
|
44
|
+
}),
|
|
45
|
+
y.steps !== void 0 && /* @__PURE__ */ p(c, {
|
|
46
|
+
steps: y.steps,
|
|
47
|
+
selectedStepId: b,
|
|
48
|
+
onSelectStep: x
|
|
49
|
+
}),
|
|
50
|
+
b !== void 0 && w === void 0 && /* @__PURE__ */ p("span", {
|
|
51
|
+
className: "text-zinc-400 italic dark:text-zinc-500",
|
|
52
|
+
children: g
|
|
53
|
+
}),
|
|
54
|
+
w !== void 0 && /* @__PURE__ */ p("div", {
|
|
55
|
+
className: "overflow-auto rounded border border-zinc-200 dark:border-zinc-700",
|
|
56
|
+
children: /* @__PURE__ */ p(l, { value: w })
|
|
57
|
+
}),
|
|
58
|
+
/* @__PURE__ */ p("div", {
|
|
59
|
+
className: "mt-1 font-medium tracking-wide text-zinc-400 uppercase dark:text-zinc-500",
|
|
60
|
+
children: "Run"
|
|
61
|
+
}),
|
|
62
|
+
/* @__PURE__ */ m("div", {
|
|
63
|
+
className: "flex justify-between gap-2",
|
|
64
|
+
children: [/* @__PURE__ */ p("span", {
|
|
65
|
+
className: "text-zinc-400 dark:text-zinc-500",
|
|
66
|
+
children: "Mode"
|
|
67
|
+
}), /* @__PURE__ */ p("span", {
|
|
68
|
+
className: "text-zinc-700 dark:text-zinc-200",
|
|
69
|
+
children: e[y.mode]
|
|
70
|
+
})]
|
|
71
|
+
}),
|
|
72
|
+
/* @__PURE__ */ m("div", {
|
|
73
|
+
className: "flex justify-between gap-2",
|
|
74
|
+
children: [/* @__PURE__ */ p("span", {
|
|
75
|
+
className: "text-zinc-400 dark:text-zinc-500",
|
|
76
|
+
children: "Started"
|
|
77
|
+
}), /* @__PURE__ */ p("span", {
|
|
78
|
+
className: "text-zinc-700 tabular-nums dark:text-zinc-200",
|
|
79
|
+
children: r(y.startedAt)
|
|
80
|
+
})]
|
|
81
|
+
}),
|
|
82
|
+
/* @__PURE__ */ m("div", {
|
|
83
|
+
className: "flex justify-between gap-2",
|
|
84
|
+
children: [/* @__PURE__ */ p("span", {
|
|
85
|
+
className: "text-zinc-400 dark:text-zinc-500",
|
|
86
|
+
children: "Took"
|
|
87
|
+
}), /* @__PURE__ */ p("span", {
|
|
88
|
+
className: "text-zinc-700 tabular-nums dark:text-zinc-200",
|
|
89
|
+
children: C === void 0 ? "still running" : n(C)
|
|
90
|
+
})]
|
|
91
|
+
}),
|
|
92
|
+
y.elementId !== void 0 && /* @__PURE__ */ m("div", {
|
|
93
|
+
className: "flex justify-between gap-2",
|
|
94
|
+
children: [/* @__PURE__ */ p("span", {
|
|
95
|
+
className: "text-zinc-400 dark:text-zinc-500",
|
|
96
|
+
children: "Element"
|
|
97
|
+
}), /* @__PURE__ */ p("span", {
|
|
98
|
+
className: "truncate font-mono text-zinc-600 dark:text-zinc-300",
|
|
99
|
+
children: y.elementId
|
|
100
|
+
})]
|
|
101
|
+
}),
|
|
102
|
+
y.runId !== void 0 && /* @__PURE__ */ m("div", {
|
|
103
|
+
className: "flex flex-col gap-0.5",
|
|
104
|
+
children: [/* @__PURE__ */ p("span", {
|
|
105
|
+
className: "text-zinc-400 dark:text-zinc-500",
|
|
106
|
+
children: "Run id"
|
|
107
|
+
}), /* @__PURE__ */ p("span", {
|
|
108
|
+
className: "font-mono break-all text-zinc-600 dark:text-zinc-300",
|
|
109
|
+
children: y.runId
|
|
110
|
+
})]
|
|
111
|
+
}),
|
|
112
|
+
y.input !== void 0 && /* @__PURE__ */ m(f, { children: [/* @__PURE__ */ p("div", {
|
|
113
|
+
className: "mt-1 font-medium tracking-wide text-zinc-400 uppercase dark:text-zinc-500",
|
|
114
|
+
children: "Input"
|
|
115
|
+
}), /* @__PURE__ */ p("div", {
|
|
116
|
+
className: "overflow-auto rounded border border-zinc-200 dark:border-zinc-700",
|
|
117
|
+
children: /* @__PURE__ */ p(l, { value: y.input })
|
|
118
|
+
})] }),
|
|
119
|
+
y.output !== void 0 && /* @__PURE__ */ m(f, { children: [/* @__PURE__ */ p("div", {
|
|
120
|
+
className: "mt-1 font-medium tracking-wide text-zinc-400 uppercase dark:text-zinc-500",
|
|
121
|
+
children: "Output"
|
|
122
|
+
}), /* @__PURE__ */ p("div", {
|
|
123
|
+
className: "overflow-auto rounded border border-zinc-200 dark:border-zinc-700",
|
|
124
|
+
children: /* @__PURE__ */ p(l, { value: y.output })
|
|
125
|
+
})] }),
|
|
126
|
+
y.progress.length > 0 && /* @__PURE__ */ m(f, { children: [/* @__PURE__ */ m("div", {
|
|
127
|
+
className: "mt-1 font-medium tracking-wide text-zinc-400 uppercase dark:text-zinc-500",
|
|
128
|
+
children: [
|
|
129
|
+
"Progress (",
|
|
130
|
+
y.progress.length,
|
|
131
|
+
")"
|
|
132
|
+
]
|
|
133
|
+
}), /* @__PURE__ */ p("div", {
|
|
134
|
+
className: "overflow-auto rounded border border-zinc-200 dark:border-zinc-700",
|
|
135
|
+
children: /* @__PURE__ */ p(l, { value: y.progress })
|
|
136
|
+
})] })
|
|
137
|
+
] });
|
|
138
|
+
};
|
|
139
|
+
//#endregion
|
|
140
|
+
export { y as default };
|