@railtownai/railtracks-visualizer 0.0.22 → 0.0.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.js +365 -256
- package/dist/esm/index.js +365 -256
- package/dist/types/components/ErrorBoundary.d.ts +17 -0
- package/dist/types/components/icons/RailTracksIcon.d.ts +7 -0
- package/dist/types/components/nodes/AgentNode.d.ts +6 -1
- package/dist/types/components/nodes/CodeBlock.d.ts +7 -0
- package/dist/types/components/nodes/OutputRenderer.d.ts +9 -0
- package/dist/types/components/ui/header.d.ts +23 -0
- package/dist/types/components/ui/json-tree.d.ts +2 -0
- package/dist/types/dto/AgentRun.d.ts +33 -10
- package/dist/types/dto/AgentRunEdge.d.ts +61 -12
- package/dist/types/dto/AgentRunNode.d.ts +135 -28
- package/dist/types/dto/AgentRunStamp.d.ts +23 -0
- package/dist/types/dto/AgentRunStep.d.ts +23 -0
- package/dist/types/lib/utils.d.ts +12 -0
- package/package.json +5 -2
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React, { Component, ErrorInfo, ReactNode } from "react";
|
|
2
|
+
interface Props {
|
|
3
|
+
children: ReactNode;
|
|
4
|
+
fallback?: ReactNode;
|
|
5
|
+
}
|
|
6
|
+
interface State {
|
|
7
|
+
hasError: boolean;
|
|
8
|
+
error?: Error;
|
|
9
|
+
errorInfo?: ErrorInfo;
|
|
10
|
+
}
|
|
11
|
+
declare class ErrorBoundary extends Component<Props, State> {
|
|
12
|
+
constructor(props: Props);
|
|
13
|
+
static getDerivedStateFromError(error: Error): State;
|
|
14
|
+
componentDidCatch(error: Error, errorInfo: ErrorInfo): void;
|
|
15
|
+
render(): string | number | boolean | Iterable<React.ReactNode> | React.JSX.Element | null | undefined;
|
|
16
|
+
}
|
|
17
|
+
export default ErrorBoundary;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
+
import { LLMDetails, NodeDetails } from "../../dto/AgentRunNode";
|
|
2
3
|
interface NodeData {
|
|
3
4
|
label: string;
|
|
4
5
|
nodeType?: "Tool" | "Agent" | "Coordinator";
|
|
5
|
-
details?:
|
|
6
|
+
details?: NodeDetails;
|
|
6
7
|
id?: string;
|
|
7
8
|
edges?: any[];
|
|
8
9
|
edgeDetails?: {
|
|
@@ -18,5 +19,9 @@ interface AgentNodeProps {
|
|
|
18
19
|
id: string;
|
|
19
20
|
onInspect?: (nodeData: NodeData) => void;
|
|
20
21
|
}
|
|
22
|
+
export declare const getOverviewLlmDetails: (llmDetails: LLMDetails[]) => LLMDetails | null;
|
|
23
|
+
export declare const sumTotalCost: (llmDetails: LLMDetails[]) => number;
|
|
24
|
+
export declare const sumTotalInputTokens: (llmDetails: LLMDetails[]) => number;
|
|
25
|
+
export declare const sumTotalOutputTokens: (llmDetails: LLMDetails[]) => number;
|
|
21
26
|
export declare const AgentNode: React.FC<AgentNodeProps>;
|
|
22
27
|
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { JsonFile } from "../../hooks/useApi";
|
|
3
|
+
interface AgentRun {
|
|
4
|
+
id: number;
|
|
5
|
+
name: string;
|
|
6
|
+
runId: string;
|
|
7
|
+
sessionId: string;
|
|
8
|
+
}
|
|
9
|
+
interface HeaderProps {
|
|
10
|
+
availableFiles: JsonFile[];
|
|
11
|
+
currentFile: string | null;
|
|
12
|
+
onFileSelect: (filename: string) => void;
|
|
13
|
+
onRefresh: () => void;
|
|
14
|
+
loading: boolean;
|
|
15
|
+
isMultipleAgentRuns: boolean;
|
|
16
|
+
agentRuns: AgentRun[];
|
|
17
|
+
selectedAgentRun: number;
|
|
18
|
+
onAgentRunSelect: (runIndex: number) => void;
|
|
19
|
+
showTimeline: boolean;
|
|
20
|
+
onTimelineToggle: (checked: boolean) => void;
|
|
21
|
+
}
|
|
22
|
+
export declare const Header: React.FC<HeaderProps>;
|
|
23
|
+
export {};
|
|
@@ -3,8 +3,10 @@ interface JsonTreeViewerProps {
|
|
|
3
3
|
data: any;
|
|
4
4
|
maxDepth?: number;
|
|
5
5
|
initialExpanded?: boolean;
|
|
6
|
+
expanded?: boolean;
|
|
6
7
|
className?: string;
|
|
7
8
|
priorityKeys?: string[];
|
|
9
|
+
excludeKeys?: string[];
|
|
8
10
|
}
|
|
9
11
|
declare const JsonTreeViewer: React.FC<JsonTreeViewerProps>;
|
|
10
12
|
export { JsonTreeViewer };
|
|
@@ -1,19 +1,42 @@
|
|
|
1
1
|
import { AgentRunNode } from "./AgentRunNode";
|
|
2
2
|
import { AgentRunEdge } from "./AgentRunEdge";
|
|
3
|
+
import { AgentRunStamp } from "./AgentRunStamp";
|
|
4
|
+
import { AgentRunStep } from "./AgentRunStep";
|
|
5
|
+
/**
|
|
6
|
+
* Represents a complete agent execution run with its nodes, edges, and metadata
|
|
7
|
+
*
|
|
8
|
+
* This interface defines the structure for agent flow data that can be visualized
|
|
9
|
+
* in the RailTracks UI. It contains the execution graph (nodes and edges) along
|
|
10
|
+
* with timing information and session metadata.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const agentRun: AgentRun = {
|
|
15
|
+
* session_id: "session_123",
|
|
16
|
+
* name: "Customer Support Agent",
|
|
17
|
+
* run_id: "run_456",
|
|
18
|
+
* nodes: [...],
|
|
19
|
+
* edges: [...],
|
|
20
|
+
* stamps: [
|
|
21
|
+
* { step: 1, time: 1640995200, identifier: "start" },
|
|
22
|
+
* { step: 2, time: 1640995201, identifier: "user_input" }
|
|
23
|
+
* ]
|
|
24
|
+
* };
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
3
27
|
export interface AgentRun {
|
|
28
|
+
/** Unique identifier for the agent session this run belongs to */
|
|
4
29
|
session_id: string;
|
|
30
|
+
/** Human-readable name for this agent run */
|
|
5
31
|
name: string;
|
|
32
|
+
/** Unique identifier for this specific agent run */
|
|
6
33
|
run_id: string;
|
|
34
|
+
/** Array of nodes representing the agent's execution steps */
|
|
7
35
|
nodes: AgentRunNode[];
|
|
36
|
+
/** Optional array of edges connecting the nodes in the execution flow */
|
|
8
37
|
edges?: AgentRunEdge[];
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}>;
|
|
14
|
-
steps?: Array<{
|
|
15
|
-
step: number;
|
|
16
|
-
time: number;
|
|
17
|
-
identifier: string;
|
|
18
|
-
}>;
|
|
38
|
+
/** Optional array of timestamped events that occurred during the run */
|
|
39
|
+
stamps?: AgentRunStamp[];
|
|
40
|
+
/** Optional array of execution steps with timing information */
|
|
41
|
+
steps?: AgentRunStep[];
|
|
19
42
|
}
|
|
@@ -1,18 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Represents a timestamped event for an edge
|
|
3
|
+
*/
|
|
4
|
+
export interface EdgeStamp {
|
|
5
|
+
/** The sequential step number in the agent execution */
|
|
6
|
+
step: number;
|
|
7
|
+
/** Unix timestamp when this event occurred */
|
|
8
|
+
time: number;
|
|
9
|
+
/** Unique identifier for this stamp */
|
|
10
|
+
identifier: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Represents detailed information about an edge
|
|
14
|
+
*/
|
|
15
|
+
export interface EdgeDetails {
|
|
16
|
+
/** Optional status information for the edge */
|
|
17
|
+
status?: string;
|
|
18
|
+
/** Optional array of input arguments passed to the target node */
|
|
19
|
+
input_args?: any[];
|
|
20
|
+
/** Optional object of input keyword arguments passed to the target node */
|
|
21
|
+
input_kwargs?: any;
|
|
22
|
+
/** Optional output data from the source node */
|
|
23
|
+
output?: any;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Represents an edge connecting nodes in the agent execution flow
|
|
27
|
+
*
|
|
28
|
+
* This interface defines the structure for connections between nodes in an agent run.
|
|
29
|
+
* Edges represent the flow of data and control between different execution steps,
|
|
30
|
+
* with timing information and optional execution details.
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```typescript
|
|
34
|
+
* const edge: AgentRunEdge = {
|
|
35
|
+
* identifier: "edge_123",
|
|
36
|
+
* source: "node_1",
|
|
37
|
+
* target: "node_2",
|
|
38
|
+
* stamp: {
|
|
39
|
+
* step: 2,
|
|
40
|
+
* time: 1640995201,
|
|
41
|
+
* identifier: "edge_1_to_2"
|
|
42
|
+
* },
|
|
43
|
+
* details: {
|
|
44
|
+
* state: "completed",
|
|
45
|
+
* status: "success",
|
|
46
|
+
* input_args: ["Hello world"],
|
|
47
|
+
* input_kwargs: { temperature: 0.7 },
|
|
48
|
+
* output: { response: "Hi there!" }
|
|
49
|
+
* },
|
|
50
|
+
* parent: null
|
|
51
|
+
* };
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
1
54
|
export interface AgentRunEdge {
|
|
55
|
+
/** Unique identifier for this edge */
|
|
2
56
|
identifier: string;
|
|
57
|
+
/** Identifier of the source node, or null if this is an entry edge */
|
|
3
58
|
source: string | null;
|
|
59
|
+
/** Identifier of the target node this edge connects to */
|
|
4
60
|
target: string;
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
details: {
|
|
11
|
-
state?: string;
|
|
12
|
-
status?: string;
|
|
13
|
-
input_args?: any[];
|
|
14
|
-
input_kwargs?: any;
|
|
15
|
-
output?: any;
|
|
16
|
-
};
|
|
61
|
+
/** Timestamp information for when this edge was traversed */
|
|
62
|
+
stamp: EdgeStamp;
|
|
63
|
+
/** Detailed information about the edge's execution */
|
|
64
|
+
details: EdgeDetails;
|
|
65
|
+
/** Reference to the parent edge, or null if this is a root edge */
|
|
17
66
|
parent: AgentRunEdge | null;
|
|
18
67
|
}
|
|
@@ -1,34 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Represents a timestamped event for a node
|
|
3
|
+
*/
|
|
4
|
+
export interface NodeStamp {
|
|
5
|
+
/** The sequential step number in the agent execution */
|
|
6
|
+
step: number;
|
|
7
|
+
/** Unix timestamp when this event occurred */
|
|
8
|
+
time: number;
|
|
9
|
+
/** Unique identifier for this stamp */
|
|
10
|
+
identifier: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Represents input/output content for LLM interactions
|
|
14
|
+
*/
|
|
15
|
+
export interface LLMContent {
|
|
16
|
+
/** Role of the message sender (e.g., "user", "assistant", "system") */
|
|
17
|
+
role: string;
|
|
18
|
+
/** The actual content of the message */
|
|
19
|
+
content: any;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Represents detailed information about an LLM interaction
|
|
23
|
+
*/
|
|
24
|
+
export interface LLMDetails {
|
|
25
|
+
/** Name of the language model used */
|
|
26
|
+
model_name: string;
|
|
27
|
+
/** Provider of the language model (e.g., "openai", "anthropic") */
|
|
28
|
+
model_provider: string;
|
|
29
|
+
/** Array of input messages sent to the LLM */
|
|
30
|
+
input: LLMContent[];
|
|
31
|
+
/** Output message received from the LLM */
|
|
32
|
+
output: LLMContent;
|
|
33
|
+
/** Number of tokens in the input (null if not available) */
|
|
34
|
+
input_tokens: number | null;
|
|
35
|
+
/** Number of tokens in the output (null if not available) */
|
|
36
|
+
output_tokens: number | null;
|
|
37
|
+
/** Total cost of the LLM interaction (null if not available) */
|
|
38
|
+
total_cost: number | null;
|
|
39
|
+
/** System fingerprint for the model (null if not available) */
|
|
40
|
+
system_fingerprint: string | null;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Represents latency information for a node execution
|
|
44
|
+
*/
|
|
45
|
+
export interface NodeLatency {
|
|
46
|
+
/** Total time taken for the node to execute in milliseconds */
|
|
47
|
+
total_time: number;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Represents internal execution details for a node
|
|
51
|
+
*/
|
|
52
|
+
export interface NodeInternals {
|
|
53
|
+
/** Optional array of LLM interaction details */
|
|
54
|
+
llm_details?: LLMDetails[];
|
|
55
|
+
/** Optional latency information for the node execution */
|
|
56
|
+
latency?: NodeLatency;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Represents detailed information about a node
|
|
60
|
+
*/
|
|
61
|
+
export interface NodeDetails {
|
|
62
|
+
/** Optional internal execution details */
|
|
63
|
+
internals?: NodeInternals;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Represents a node in the agent execution flow
|
|
67
|
+
*
|
|
68
|
+
* This interface defines the structure for individual execution steps in an agent run.
|
|
69
|
+
* Each node represents a discrete action or decision point in the agent's workflow,
|
|
70
|
+
* with timing information, execution details, and optional LLM interaction data.
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```typescript
|
|
74
|
+
* const node: AgentRunNode = {
|
|
75
|
+
* identifier: "node_123",
|
|
76
|
+
* node_type: "llm_call",
|
|
77
|
+
* name: "Generate Response",
|
|
78
|
+
* stamp: {
|
|
79
|
+
* step: 1,
|
|
80
|
+
* time: 1640995200,
|
|
81
|
+
* identifier: "llm_call_1"
|
|
82
|
+
* },
|
|
83
|
+
* details: {
|
|
84
|
+
* internals: {
|
|
85
|
+
* llm_details: [{
|
|
86
|
+
* model_name: "gpt-4",
|
|
87
|
+
* model_provider: "openai",
|
|
88
|
+
* input: [{ role: "user", content: "Hello" }],
|
|
89
|
+
* output: { role: "assistant", content: "Hi there!" },
|
|
90
|
+
* input_tokens: 5,
|
|
91
|
+
* output_tokens: 3,
|
|
92
|
+
* total_cost: 0.0001,
|
|
93
|
+
* system_fingerprint: "fp_123"
|
|
94
|
+
* }],
|
|
95
|
+
* latency: { total_time: 1500 }
|
|
96
|
+
* }
|
|
97
|
+
* },
|
|
98
|
+
* parent: null
|
|
99
|
+
* };
|
|
100
|
+
* ```
|
|
101
|
+
*/
|
|
1
102
|
export interface AgentRunNode {
|
|
103
|
+
/** Unique identifier for this node */
|
|
2
104
|
identifier: string;
|
|
105
|
+
/** Type of node (e.g., "llm_call", "tool_call", "decision") */
|
|
3
106
|
node_type: string;
|
|
107
|
+
/** Optional human-readable name for this node */
|
|
4
108
|
name?: string;
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
details: {
|
|
11
|
-
internals?: {
|
|
12
|
-
llm_details?: Array<{
|
|
13
|
-
model_name: string;
|
|
14
|
-
model_provider: string;
|
|
15
|
-
input: Array<{
|
|
16
|
-
role: string;
|
|
17
|
-
content: any;
|
|
18
|
-
}>;
|
|
19
|
-
output: {
|
|
20
|
-
role: string;
|
|
21
|
-
content: any;
|
|
22
|
-
};
|
|
23
|
-
input_tokens: number | null;
|
|
24
|
-
output_tokens: number | null;
|
|
25
|
-
total_cost: number | null;
|
|
26
|
-
system_fingerprint: string | null;
|
|
27
|
-
}>;
|
|
28
|
-
latency?: {
|
|
29
|
-
total_time: number;
|
|
30
|
-
};
|
|
31
|
-
};
|
|
32
|
-
};
|
|
109
|
+
/** Timestamp information for when this node was executed */
|
|
110
|
+
stamp: NodeStamp;
|
|
111
|
+
/** Detailed information about the node's execution */
|
|
112
|
+
details: NodeDetails;
|
|
113
|
+
/** Reference to the parent node, or null if this is a root node */
|
|
33
114
|
parent: AgentRunNode | null;
|
|
34
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
* Represents a tool call with identifier, name, and arguments
|
|
118
|
+
*/
|
|
119
|
+
export interface ToolCall {
|
|
120
|
+
/** Unique identifier for this tool call */
|
|
121
|
+
identifier: string;
|
|
122
|
+
/** Name of the tool being called */
|
|
123
|
+
name: string;
|
|
124
|
+
/** Arguments passed to the tool */
|
|
125
|
+
arguments: Record<string, any>;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Represents a tool response with identifier, name, and result
|
|
129
|
+
*/
|
|
130
|
+
export interface ToolResponse {
|
|
131
|
+
/** Unique identifier for this tool response */
|
|
132
|
+
identifier: string;
|
|
133
|
+
/** Name of the tool that generated this response */
|
|
134
|
+
name: string;
|
|
135
|
+
/** The result of the tool call */
|
|
136
|
+
result: any;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Union type for different content types that can be rendered
|
|
140
|
+
*/
|
|
141
|
+
export type Content = string | ToolCall[] | ToolResponse | any;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Represents a timestamped event in an agent run
|
|
3
|
+
*
|
|
4
|
+
* This interface defines the structure for tracking when specific events
|
|
5
|
+
* occurred during an agent's execution, with step ordering and timing information.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* const stamp: AgentRunStamp = {
|
|
10
|
+
* step: 1,
|
|
11
|
+
* time: 1640995200,
|
|
12
|
+
* identifier: "user_input_received"
|
|
13
|
+
* };
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export interface AgentRunStamp {
|
|
17
|
+
/** The sequential step number in the agent execution */
|
|
18
|
+
step: number;
|
|
19
|
+
/** Unix timestamp when this event occurred */
|
|
20
|
+
time: number;
|
|
21
|
+
/** Unique identifier for this stamp */
|
|
22
|
+
identifier: string;
|
|
23
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Represents a step in the agent execution flow
|
|
3
|
+
*
|
|
4
|
+
* This interface defines the structure for individual execution steps
|
|
5
|
+
* in an agent run, with timing and identification information.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* const step: AgentRunStep = {
|
|
10
|
+
* step: 2,
|
|
11
|
+
* time: 1640995201,
|
|
12
|
+
* identifier: "llm_generation"
|
|
13
|
+
* };
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export interface AgentRunStep {
|
|
17
|
+
/** The sequential step number in the agent execution */
|
|
18
|
+
step: number;
|
|
19
|
+
/** Unix timestamp when this step occurred */
|
|
20
|
+
time: number;
|
|
21
|
+
/** Unique identifier for this step */
|
|
22
|
+
identifier: string;
|
|
23
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type ClassValue } from "clsx";
|
|
2
|
+
import { ToolCall } from "../dto/AgentRunNode";
|
|
2
3
|
export declare function cn(...inputs: ClassValue[]): string;
|
|
3
4
|
/**
|
|
4
5
|
* Converts a string to title case
|
|
@@ -77,3 +78,14 @@ export declare function getSafeThemeValue(theme: any, path: string, fallback: an
|
|
|
77
78
|
* @returns A safe theme object with fallbacks
|
|
78
79
|
*/
|
|
79
80
|
export declare function createSafeTheme(theme?: any): any;
|
|
81
|
+
/**
|
|
82
|
+
* Detects the type of content for rendering
|
|
83
|
+
*/
|
|
84
|
+
export declare const detectContentType: (output: {
|
|
85
|
+
role: string;
|
|
86
|
+
content: any;
|
|
87
|
+
}) => "string" | "toolResponse" | "toolCallList" | "other";
|
|
88
|
+
/**
|
|
89
|
+
* Formats tool calls for display in a code block
|
|
90
|
+
*/
|
|
91
|
+
export declare const formatToolCalls: (toolCalls: ToolCall[]) => string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@railtownai/railtracks-visualizer",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.24",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"author": "Railtown AI",
|
|
6
6
|
"description": "A visualizer for RailTracks agentic flows",
|
|
@@ -37,13 +37,16 @@
|
|
|
37
37
|
"react-dom": "^18.3.1"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
+
"@ant-design/plots": "2.6.3",
|
|
40
41
|
"@emotion/react": "11.14.0",
|
|
41
42
|
"@emotion/styled": "11.14.1",
|
|
42
43
|
"@radix-ui/react-checkbox": "1.3.3",
|
|
43
44
|
"@radix-ui/react-dialog": "1.1.15",
|
|
44
45
|
"@radix-ui/react-select": "2.2.6",
|
|
46
|
+
"@railtownai/railtracks-timeline": "0.0.3",
|
|
45
47
|
"@xyflow/react": "12.8.4",
|
|
46
48
|
"lucide-react": "0.525.0",
|
|
49
|
+
"moment": "2.30.1",
|
|
47
50
|
"react-countup": "6.5.3",
|
|
48
51
|
"vaul": "1.1.2"
|
|
49
52
|
},
|
|
@@ -54,7 +57,7 @@
|
|
|
54
57
|
"build:size": "npm pack --dry-run",
|
|
55
58
|
"build": "npm run build:types && npm run build:lib && npm run build:spa",
|
|
56
59
|
"clean": "rm -rf dist build test-results .railtracks/ui/*",
|
|
57
|
-
"dev
|
|
60
|
+
"dev": "rm -rf .railtracks/ui/* && vite build && cp -r build/* .railtracks/ui",
|
|
58
61
|
"lint:fix": "prettier --write \"src/**/*.{js,jsx,ts,tsx,json,css,md}\"",
|
|
59
62
|
"lint": "prettier --check \"src/**/*.{js,jsx,ts,tsx,json,css,md}\"",
|
|
60
63
|
"start": "storybook dev -p 6006",
|