@motiadev/plugin-observability 0.13.0-beta.162-158257 → 0.13.0-beta.162-945354

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/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["ReactSharedInternals","require","__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE","exports","c","size","H","useMemoCache","process","env","NODE_ENV","ReactSharedInternals","require","__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE","exports","c","size","dispatcher","H","console","error","useMemoCache","process","env","NODE_ENV","module","exports","require","create","ObservabilityState","selectedTraceGroupId","selectedTraceId","search","selectTraceGroupId","groupId","selectTraceId","traceId","setSearch","clearTraces","useObservabilityStore","set","undefined","fetch","method","Button","cn","Input","Search","Trash","X","memo","useObservabilityStore","SearchBar","$","_c","search","_temp","setSearch","_temp2","clearTraces","_temp3","t0","e","target","value","t1","t2","Symbol","for","t3","t4","t5","visible","invisible","t6","t7","t8","t9","t10","t11","displayName","state","state_0","state_1","memo","useObservabilityStore","TraceEmptyState","React","FC","$","_c","selectedGroupId","_temp","t0","Symbol","for","displayName","state","selectedTraceGroupId","useEffect","useState","TraceGroup","useGetEndTime","group","$","_c","groupEndTime","endTime","t0","Date","now","setEndTime","t1","t2","interval","setInterval","clearInterval","formatDuration","duration","undefined","toFixed","cn","React","memo","useCallback","useMemo","GRADIENT_CLASSES","running","completed","failed","const","Props","traceId","traceName","traceStatus","traceStartTime","traceEndTime","groupStartTime","groupEndTime","onExpand","TraceItem","FC","t0","$","_c","t1","handleClick","t2","t3","barClassName","t4","t5","Date","now","t6","marginLeft","width","barStyle","t7","t8","t9","displayName","MessageCircle","Package","Radio","ScrollText","React","TraceEvent","TraceEventType","Props","event","EventIcon","FC","t0","$","_c","type","t1","Symbol","for","Button","cn","Check","Copy","useCallback","useState","CopyButtonProps","textToCopy","className","title","CopyButton","React","FC","t0","$","_c","copied","setCopied","t1","navigator","clipboard","writeText","setTimeout","t2","error","console","handleCopy","t3","t4","t5","cn","PopoverPrimitive","ComponentProps","FC","Popover","Root","t0","$","_c","props","t1","PopoverTrigger","Trigger","PopoverContent","Content","className","t2","align","sideOffset","undefined","t3","t4","PopoverAnchor","Anchor","formatArgumentValue","arg","JSON","stringify","toString","memo","useMemo","ReactJson","CopyButton","Popover","PopoverContent","PopoverTrigger","formatArgumentValue","ArgumentProps","arg","popover","Argument","React","FC","t0","$","_c","t1","undefined","isObject","t2","value","t3","JSON","stringify","textToCopy","t4","padding","t5","t6","displayName","memo","ClosingParenthesisProps","callsQuantity","noQuantity","ClosingParenthesis","React","FC","t0","$","_c","t1","undefined","hasCalls","t2","Symbol","for","t3","t4","displayName","cn","forwardRef","FunctionCallContentProps","topLevelClassName","objectName","functionName","className","FunctionCallContent","HTMLDivElement","t0","ref","$","_c","props","t1","t2","t3","t4","t5","Symbol","for","t6","displayName","Fragment","memo","useMemo","CopyButton","Popover","PopoverContent","PopoverTrigger","Argument","ClosingParenthesis","FunctionCallContent","Props","topLevelClassName","objectName","functionName","args","Array","callsQuantity","GRID_LAYOUT_STYLE","gridTemplateColumns","FunctionCall","React","FC","t0","$","_c","t1","filter","_temp","filteredArgs","t2","length","t3","argsGridStyle","t4","Boolean","prefix","join","fullPrefix","t5","map","_temp2","argsString","functionCallText","t6","t7","t8","t9","t10","t11","arg_1","index","arg","t12","t13","t14","t15","arg_2","index_0","t16","t17","displayName","undefined","arg_0","JSON","stringify","String","React","memo","useMemo","EmitEvent","FunctionCall","TraceEmitEvent","FC","event","t0","$","_c","t1","data","topic","args","t2","displayName","LevelDot","React","memo","LogEntry","TraceLogEvent","FC","event","t0","$","_c","t1","level","t2","message","displayName","React","memo","useMemo","StateEvent","FunctionCall","TraceStateEvent","FC","event","t0","$","_c","t1","data","key","traceId","value","args","t2","operation","displayName","React","memo","useMemo","StreamEvent","FunctionCall","TraceStreamEvent","FC","event","t0","$","_c","t1","data","Array","t2","groupId","id","args","t3","calls","operation","streamName","displayName","React","memo","TraceEvent","TraceEventType","TraceEmitEvent","TraceLogEvent","TraceStateEvent","TraceStreamEvent","FC","event","t0","$","_c","type","t1","displayName","React","Fragment","memo","formatDuration","TraceEvent","TraceEventType","EventIcon","Props","event","traceStartTime","TraceEventItem","FC","t0","$","_c","t1","Symbol","for","t2","t3","Math","floor","timestamp","t4","t5","t6","t7","displayName","Badge","Sidebar","X","React","memo","useMemo","formatDuration","Trace","TraceEventItem","Props","trace","onClose","TraceItemDetail","FC","t0","$","_c","t1","Symbol","for","t2","icon","onClick","label","actions","t3","name","t4","endTime","startTime","t5","entryPoint","type","t6","correlationId","t7","t8","events","t9","event","index","map","t10","t11","error","message","stack","t12","displayName","useStreamGroup","useStreamItem","Button","Minus","Plus","React","memo","useCallback","useMemo","useState","useGetEndTime","formatDuration","useObservabilityStore","Trace","TraceGroup","TraceItem","TraceItemDetail","TraceTimeline","FC","$","_c","groupId","_temp","t0","displayName","TraceTimelineComponentProps","TraceTimelineComponent","streamItemArgs","streamName","id","data","group","streamGroupArgs","endTime","zoom","setZoom","selectedTraceId","state","selectTraceId","selectedTrace","find","trace","zoomMinus","prev","zoomPlus","width","Math","floor","startTime","map","name","status","undefined","selectedTraceGroupId","useStreamGroup","useMemo","useObservabilityStore","TraceGroup","useFilteredTraceGroups","$","_c","t0","Symbol","for","streamName","groupId","streamGroupArgs","data","search","_temp","t1","filter","group","name","toLowerCase","includes","id","state","Badge","BadgeProps","React","memo","TraceGroup","Props","status","duration","variantMap","running","completed","failed","default","TraceStatusBadge","FC","t0","$","_c","t1","t2","t3","displayName","cn","formatDistanceToNow","React","memo","useCallback","useMemo","formatDuration","useObservabilityStore","TraceStatusBadge","TraceGroupItemProps","groupId","groupName","groupStatus","groupStartTime","groupEndTime","totalSteps","activeSteps","isSelected","TraceGroupItem","FC","t0","$","_c","selectTraceGroupId","_temp","t1","undefined","duration","t2","onSelect","t3","t4","t5","t6","t7","t8","t9","t10","t11","t12","t13","t14","t15","t16","t17","displayName","state","React","memo","useEffect","useMemo","useFilteredTraceGroups","useObservabilityStore","TraceGroupItem","TracesGroups","FC","$","_c","groups","selectedGroupId","_temp","selectTraceGroupId","_temp2","groupsLength","length","t0","bb0","lastGroup","status","id","lastRunningGroupId","t1","t2","t3","reverse","reversedGroups","t4","t5","group","name","startTime","endTime","metadata","totalSteps","activeSteps","map","displayName","state","selectedTraceGroupId","state_0","memo","SearchBar","TraceEmptyState","TraceTimeline","TracesGroups","ObservabilityPage","$","_c","t0","Symbol","for","t1","t2","displayName","GanttChartSquare","memo","ObservabilityTabLabel","$","_c","t0","Symbol","for","displayName"],"sources":["../../../node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-compiler-runtime.production.js","../../../node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-compiler-runtime.development.js","../../../node_modules/.pnpm/react@19.2.0/node_modules/react/compiler-runtime.js","../src/stores/use-observability-store.ts","../src/components/search-bar.tsx","../src/components/trace-empty-state.tsx","../src/hooks/use-get-endtime.ts","../src/lib/utils.ts","../src/components/trace-item/trace-item.tsx","../src/components/events/event-icon.tsx","../src/components/ui/copy-button.tsx","../src/components/ui/popover.tsx","../src/components/events/code/utils.ts","../src/components/events/code/argument.tsx","../src/components/events/code/closing-parenthesis.tsx","../src/components/events/code/function-call-content.tsx","../src/components/events/code/function-call.tsx","../src/components/events/trace-emit-event.tsx","../src/components/events/trace-log-event.tsx","../src/components/events/trace-state-event.tsx","../src/components/events/trace-stream-event.tsx","../src/components/events/trace-event.tsx","../src/components/trace-item/trace-event-item.tsx","../src/components/trace-item/trace-item-detail.tsx","../src/components/trace-timeline.tsx","../src/hooks/use-filtered-trace-groups.ts","../src/components/trace-status.tsx","../src/components/trace-group-item.tsx","../src/components/traces-groups.tsx","../src/components/observability-page.tsx","../src/components/observability-tab-label.tsx"],"sourcesContent":["/**\n * @license React\n * react-compiler-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar ReactSharedInternals =\n require(\"react\").__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\nexports.c = function (size) {\n return ReactSharedInternals.H.useMemoCache(size);\n};\n","/**\n * @license React\n * react-compiler-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n var ReactSharedInternals =\n require(\"react\").__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\n exports.c = function (size) {\n var dispatcher = ReactSharedInternals.H;\n null === dispatcher &&\n console.error(\n \"Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\n2. You might be breaking the Rules of Hooks\\n3. You might have more than one copy of React in the same app\\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.\"\n );\n return dispatcher.useMemoCache(size);\n };\n })();\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-compiler-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-compiler-runtime.development.js');\n}\n","import { create } from 'zustand'\n\nexport type ObservabilityState = {\n selectedTraceGroupId: string\n selectedTraceId?: string\n search: string\n selectTraceGroupId: (groupId?: string) => void\n selectTraceId: (traceId?: string) => void\n setSearch: (search: string) => void\n clearTraces: () => void\n}\n\nexport const useObservabilityStore = create<ObservabilityState>()((set) => ({\n selectedTraceGroupId: '',\n selectedTraceId: undefined,\n search: '',\n selectTraceGroupId: (groupId) => set({ selectedTraceGroupId: groupId }),\n selectTraceId: (traceId) => set({ selectedTraceId: traceId }),\n setSearch: (search) => set({ search }),\n clearTraces: () => {\n fetch('/__motia/trace/clear', { method: 'POST' })\n },\n}))\n","import { Button, cn, Input } from '@motiadev/ui'\nimport { Search, Trash, X } from 'lucide-react'\nimport { memo } from 'react'\nimport { useObservabilityStore } from '../stores/use-observability-store'\n\nexport const SearchBar = memo(() => {\n const search = useObservabilityStore((state) => state.search)\n const setSearch = useObservabilityStore((state) => state.setSearch)\n const clearTraces = useObservabilityStore((state) => state.clearTraces)\n\n return (\n <div className=\"flex p-2 border-b gap-2\" data-testid=\"logs-search-container\">\n <div className=\"flex-1 relative\">\n <Input\n variant=\"shade\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"px-9! font-medium\"\n placeholder=\"Search by Trace ID or Step Name\"\n />\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground/50\" />\n <X\n className={cn(\n 'cursor-pointer absolute right-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground/50 hover:text-muted-foreground',\n {\n visible: search !== '',\n invisible: search === '',\n },\n )}\n onClick={() => setSearch('')}\n />\n </div>\n <Button variant=\"default\" onClick={clearTraces} className=\"h-[34px]\">\n <Trash /> Clear\n </Button>\n </div>\n )\n})\n\nSearchBar.displayName = 'SearchBar'\n","import { memo } from 'react'\nimport { useObservabilityStore } from '../stores/use-observability-store'\n\nexport const TraceEmptyState: React.FC = memo(() => {\n const selectedGroupId = useObservabilityStore((state) => state.selectedTraceGroupId)\n\n if (selectedGroupId) {\n return null\n }\n\n return (\n <div className=\"flex items-center justify-center h-full text-muted-foreground\">\n Select a trace or trace group to view the timeline\n </div>\n )\n})\nTraceEmptyState.displayName = 'TraceEmptyState'\n","import { useEffect, useState } from 'react'\nimport type { TraceGroup } from '../types/observability'\n\nexport const useGetEndTime = (group: TraceGroup | undefined | null) => {\n const groupEndTime = group?.endTime\n const [endTime, setEndTime] = useState(() => groupEndTime || Date.now())\n\n useEffect(() => {\n let interval: NodeJS.Timeout\n if (groupEndTime) {\n if (groupEndTime !== endTime) {\n setEndTime(groupEndTime)\n }\n } else {\n interval = setInterval(() => setEndTime(Date.now()), 100)\n }\n\n return () => clearInterval(interval)\n }, [groupEndTime, endTime])\n\n return endTime\n}\n","export const formatDuration = (duration?: number) => {\n if (duration === undefined || duration === null) return 'N/A'\n if (duration < 1000) return `${duration}ms`\n if (duration < 60000) return `${(duration / 1000).toFixed(1)}s`\n if (duration < 3600000) return `${(duration / 60000).toFixed(1)}min`\n return `${(duration / 3600000).toFixed(1)}h`\n}\n","import { cn } from '@motiadev/ui'\nimport type React from 'react'\nimport { memo, useCallback, useMemo } from 'react'\n\nconst GRADIENT_CLASSES = {\n running: 'bg-[repeating-linear-gradient(140deg,#BEFE29,#BEFE29_8px,#ABE625_8px,#ABE625_16px)]',\n completed: 'bg-[repeating-linear-gradient(140deg,#2862FE,#2862FE_8px,#2358E5_8px,#2358E5_16px)]',\n failed: 'bg-[repeating-linear-gradient(140deg,#EA2069,#EA2069_8px,#D41E60_8px,#D41E60_16px)]',\n} as const\n\ntype Props = {\n traceId: string\n traceName: string\n traceStatus: 'running' | 'completed' | 'failed'\n traceStartTime: number\n traceEndTime: number | undefined\n groupStartTime: number\n groupEndTime: number\n onExpand: (traceId: string) => void\n}\n\nexport const TraceItem: React.FC<Props> = memo(\n ({ traceId, traceName, traceStatus, traceStartTime, traceEndTime, groupStartTime, groupEndTime, onExpand }) => {\n const handleClick = useCallback(() => {\n onExpand(traceId)\n }, [onExpand, traceId])\n\n const barClassName = useMemo(\n () => cn('h-[24px] rounded-[4px] hover:opacity-80 transition-all duration-200', GRADIENT_CLASSES[traceStatus]),\n [traceStatus],\n )\n\n const barStyle = useMemo(\n () => ({\n marginLeft: `${((traceStartTime - groupStartTime) / (groupEndTime - groupStartTime)) * 100}%`,\n width: traceEndTime\n ? `${((traceEndTime - traceStartTime) / (groupEndTime - groupStartTime)) * 100}%`\n : `${((Date.now() - traceStartTime) / (groupEndTime - groupStartTime)) * 100}%`,\n }),\n [traceStartTime, traceEndTime, groupStartTime, groupEndTime],\n )\n\n return (\n <div\n className=\"flex hover:bg-muted-foreground/10 relative cursor-pointer\"\n onClick={handleClick}\n data-testid=\"trace-timeline-item\"\n >\n <div className=\"flex items-center min-w-[200px] max-w-[200px] h-[32px] max-h-[32px] py-4 px-2 text-sm font-semibold text-foreground truncate sticky left-0 bg-card z-9\">\n {traceName}\n </div>\n <div className=\"flex w-full flex-row items-center hover:bg-muted/50 rounded-md\">\n <div className=\"relative w-full h-[32px] flex items-center\">\n <div className={barClassName} style={barStyle} />\n </div>\n </div>\n </div>\n )\n },\n)\nTraceItem.displayName = 'TraceItem'\n","import { MessageCircle, Package, Radio, ScrollText } from 'lucide-react'\nimport type React from 'react'\nimport type { TraceEvent as TraceEventType } from '../../types/observability'\n\ntype Props = {\n event: TraceEventType\n}\n\nexport const EventIcon: React.FC<Props> = ({ event }) => {\n if (event.type === 'log') {\n return <ScrollText className=\"w-4 h-4 text-muted-foreground\" />\n } else if (event.type === 'emit') {\n return <MessageCircle className=\"w-4 h-4 text-muted-foreground\" />\n } else if (event.type === 'state') {\n return <Package className=\"w-4 h-4 text-muted-foreground\" />\n } else if (event.type === 'stream') {\n return <Radio className=\"w-4 h-4 text-muted-foreground\" />\n }\n}\n","import { Button, cn } from '@motiadev/ui'\nimport { Check, Copy } from 'lucide-react'\nimport { useCallback, useState } from 'react'\n\ntype CopyButtonProps = {\n textToCopy: string\n className?: string\n title?: string\n}\n\nexport const CopyButton: React.FC<CopyButtonProps> = ({ textToCopy, className, title }) => {\n const [copied, setCopied] = useState(false)\n\n const handleCopy = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(textToCopy)\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n } catch (error) {\n console.error('Failed to copy:', error)\n }\n }, [textToCopy])\n\n return (\n <Button\n variant=\"icon\"\n size=\"icon\"\n onClick={handleCopy}\n className={cn('cursor-pointer p-3 rounded-full', className)}\n title={title ?? (copied ? 'Copied!' : 'Copy')}\n >\n {copied ? <Check className=\"w-4 h-4 text-green-500\" /> : <Copy className=\"w-4 h-4 text-gray-400\" />}\n </Button>\n )\n}\n","import { cn } from '@motiadev/ui'\nimport * as PopoverPrimitive from '@radix-ui/react-popover'\nimport type { ComponentProps, FC } from 'react'\n\nexport const Popover: FC<ComponentProps<typeof PopoverPrimitive.Root>> = ({ ...props }) => {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nexport const PopoverTrigger: FC<ComponentProps<typeof PopoverPrimitive.Trigger>> = ({ ...props }) => {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />\n}\n\nexport const PopoverContent: FC<ComponentProps<typeof PopoverPrimitive.Content>> = ({\n className,\n align = 'center',\n sideOffset = 4,\n ...props\n}) => {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden',\n className,\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n )\n}\n\nexport const PopoverAnchor: FC<ComponentProps<typeof PopoverPrimitive.Anchor>> = ({ ...props }) => {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />\n}\n","export const formatArgumentValue = (arg: string | object | false | null): string => {\n if (typeof arg === 'object' && arg !== null) {\n return JSON.stringify(arg, null, 1)\n }\n if (arg === null) {\n return 'null'\n }\n\n return arg.toString()\n}\n","import { memo, useMemo } from 'react'\nimport ReactJson from 'react18-json-view'\nimport { CopyButton } from '../../../components/ui/copy-button'\nimport { Popover, PopoverContent, PopoverTrigger } from '../../../components/ui/popover'\nimport 'react18-json-view/src/dark.css'\nimport 'react18-json-view/src/style.css'\nimport { formatArgumentValue } from './utils'\n\ntype ArgumentProps = {\n arg: string | object | false\n popover?: boolean\n}\n\nexport const Argument: React.FC<ArgumentProps> = memo(({ arg, popover = true }) => {\n const isObject = useMemo(() => typeof arg === 'object' && arg !== null, [arg])\n\n const value = useMemo(() => formatArgumentValue(arg), [arg])\n\n const textToCopy = useMemo(() => JSON.stringify(arg, null, 2), [arg])\n\n if (!popover) {\n return (\n <>\n {isObject ? (\n <ReactJson src={arg} theme=\"default\" enableClipboard={false} style={{ padding: 0 }} />\n ) : (\n <span className=\"font-mono text-blue-500\">{value}</span>\n )}\n </>\n )\n }\n\n return (\n <Popover>\n <PopoverTrigger asChild>\n <span className=\"truncate font-mono text-blue-500 cursor-pointer inline-block\">{value}</span>\n </PopoverTrigger>\n <PopoverContent\n className=\"backdrop-blur-md w-auto max-w-2xl relative max-h-[50vh] overflow-y-auto\"\n hideWhenDetached\n >\n {isObject ? (\n <div>\n <CopyButton textToCopy={textToCopy} className=\"absolute top-4 right-4\" title=\"Copy JSON\" />\n <ReactJson src={arg} theme=\"default\" enableClipboard={false} style={{ padding: 0 }} />\n </div>\n ) : (\n <div className=\"flex items-center justify-between\">\n <span>{value}</span>\n <CopyButton textToCopy={textToCopy} className=\"ml-2\" title=\"Copy JSON\" />\n </div>\n )}\n </PopoverContent>\n </Popover>\n )\n})\nArgument.displayName = 'Argument'\n","import { memo } from 'react'\n\ntype ClosingParenthesisProps = {\n callsQuantity?: number\n noQuantity?: boolean\n}\n\nexport const ClosingParenthesis: React.FC<ClosingParenthesisProps> = memo(({ callsQuantity, noQuantity = false }) => {\n const hasCalls = callsQuantity && callsQuantity > 1\n\n return (\n <div className=\"flex items-center\">\n <span className=\"font-mono text-emerald-500\">)</span>\n {!noQuantity && hasCalls && <span className=\"font-mono text-muted-foreground\"> x{callsQuantity}</span>}\n </div>\n )\n})\nClosingParenthesis.displayName = 'ClosingParenthesis'\n","import { cn } from '@motiadev/ui'\nimport { forwardRef } from 'react'\n\ntype FunctionCallContentProps = {\n topLevelClassName?: string\n objectName?: string\n functionName: string\n className?: string\n}\n\nexport const FunctionCallContent = forwardRef<HTMLDivElement, FunctionCallContentProps>(\n ({ topLevelClassName, objectName, functionName, className, ...props }, ref) => {\n return (\n <div ref={ref} className={cn('flex items-center', className)} {...props}>\n {topLevelClassName && (\n <>\n <span className=\"font-mono text-pink-500\">{topLevelClassName}</span>\n <span>.</span>\n </>\n )}\n {objectName && (\n <>\n <span className=\"font-mono text-pink-500\">{objectName}</span>\n <span>.</span>\n </>\n )}\n <span className=\"font-mono text-pink-500\">{functionName}</span>\n <span className=\"font-mono text-emerald-500\">(</span>\n </div>\n )\n },\n)\nFunctionCallContent.displayName = 'FunctionCallContent'\n","import { Fragment, memo, useMemo } from 'react'\nimport { CopyButton } from '../../../components/ui/copy-button'\nimport { Popover, PopoverContent, PopoverTrigger } from '../../../components/ui/popover'\nimport { Argument } from './argument'\nimport { ClosingParenthesis } from './closing-parenthesis'\nimport { FunctionCallContent } from './function-call-content'\n\ntype Props = {\n topLevelClassName?: string\n objectName?: string\n functionName: string\n args: Array<string | object | false | undefined>\n callsQuantity?: number\n}\n\nconst GRID_LAYOUT_STYLE = { gridTemplateColumns: 'max-content 1fr max-content' }\n\nexport const FunctionCall: React.FC<Props> = memo(\n ({ topLevelClassName, objectName, functionName, args, callsQuantity }) => {\n const filteredArgs = useMemo(() => args.filter((arg) => arg !== undefined), [args])\n\n const argsGridStyle = useMemo(\n () => ({ gridTemplateColumns: `repeat(${filteredArgs.length * 2}, minmax(0, auto))` }),\n [filteredArgs.length],\n )\n\n const functionCallText = useMemo(() => {\n const prefix = [topLevelClassName, objectName].filter(Boolean).join('.')\n const fullPrefix = prefix ? `${prefix}.` : ''\n const argsString = filteredArgs\n .map((arg) => {\n if (typeof arg === 'object' && arg !== null) {\n return JSON.stringify(arg, null, 2)\n }\n if (arg === null) {\n return 'null'\n }\n if (typeof arg === 'string') {\n return `'${arg}'`\n }\n return String(arg)\n })\n .join(', ')\n return `${fullPrefix}${functionName}(${argsString})`\n }, [topLevelClassName, objectName, functionName, filteredArgs])\n\n return (\n <div className=\"grid overflow-hidden items-center\" style={GRID_LAYOUT_STYLE}>\n <Popover>\n <PopoverTrigger asChild>\n <FunctionCallContent\n className=\"cursor-pointer\"\n functionName={functionName}\n topLevelClassName={topLevelClassName}\n objectName={objectName}\n />\n </PopoverTrigger>\n <PopoverContent\n className=\"grid grid-rows-auto backdrop-blur-md w-auto max-w-2xl max-h-[50vh] overflow-y-auto\"\n hideWhenDetached\n >\n <div className=\"flex items-center justify-between gap-2\">\n <FunctionCallContent\n functionName={functionName}\n topLevelClassName={topLevelClassName}\n objectName={objectName}\n />\n <CopyButton textToCopy={functionCallText} />\n </div>\n {filteredArgs.map((arg, index) => (\n <div key={index} className=\"grid grid-cols-[auto_1fr] items-center pl-4\">\n <Argument arg={arg} popover={false} />\n {index < filteredArgs.length - 1 && <span>, </span>}\n </div>\n ))}\n <ClosingParenthesis callsQuantity={callsQuantity} noQuantity />\n </PopoverContent>\n </Popover>\n <div className=\"grid items-center min-w-0\" style={argsGridStyle}>\n {filteredArgs.map((arg, index) => (\n <Fragment key={index}>\n <Argument arg={arg} />\n {index < filteredArgs.length - 1 && <span>, </span>}\n </Fragment>\n ))}\n </div>\n <ClosingParenthesis callsQuantity={callsQuantity} />\n </div>\n )\n },\n)\nFunctionCall.displayName = 'FunctionCall'\n","import type React from 'react'\nimport { memo, useMemo } from 'react'\nimport type { EmitEvent } from '../../types/observability'\nimport { FunctionCall } from './code/function-call'\n\nexport const TraceEmitEvent: React.FC<{ event: EmitEvent }> = memo(({ event }) => {\n const args = useMemo(() => [{ topic: event.topic, data: event.data }], [event])\n return <FunctionCall functionName=\"emit\" args={args} />\n})\nTraceEmitEvent.displayName = 'TraceEmitEvent'\n","import { LevelDot } from '@motiadev/ui'\nimport type React from 'react'\nimport { memo } from 'react'\nimport type { LogEntry } from '../../types/observability'\n\nexport const TraceLogEvent: React.FC<{ event: LogEntry }> = memo(({ event }) => {\n return (\n <div className=\"flex items-center gap-2\">\n <LevelDot level={event.level} /> {event.message}\n </div>\n )\n})\nTraceLogEvent.displayName = 'TraceLogEvent'\n","import type React from 'react'\nimport { memo, useMemo } from 'react'\nimport type { StateEvent } from '../../types/observability'\nimport { FunctionCall } from './code/function-call'\nexport const TraceStateEvent: React.FC<{ event: StateEvent }> = memo(({ event }) => {\n const args = useMemo(() => [event.data.traceId, event.data.key, event.data.value], [event])\n return <FunctionCall objectName=\"state\" functionName={event.operation} args={args} />\n})\nTraceStateEvent.displayName = 'TraceStateEvent'\n","import type React from 'react'\nimport { memo, useMemo } from 'react'\nimport type { StreamEvent } from '../../types/observability'\nimport { FunctionCall } from './code/function-call'\n\nexport const TraceStreamEvent: React.FC<{ event: StreamEvent }> = memo(({ event }) => {\n const args = useMemo(\n () => [event.data.groupId, event.data.id, event.data.data as unknown as Array<string | object | false | undefined>],\n [event],\n )\n return (\n <FunctionCall\n topLevelClassName=\"streams\"\n objectName={event.streamName}\n functionName={event.operation}\n args={args}\n callsQuantity={event.calls}\n />\n )\n})\nTraceStreamEvent.displayName = 'TraceStreamEvent'\n","import type React from 'react'\nimport { memo } from 'react'\nimport type { TraceEvent as TraceEventType } from '../../types/observability'\nimport { TraceEmitEvent } from './trace-emit-event'\nimport { TraceLogEvent } from './trace-log-event'\nimport { TraceStateEvent } from './trace-state-event'\nimport { TraceStreamEvent } from './trace-stream-event'\n\nexport const TraceEvent: React.FC<{ event: TraceEventType }> = memo(({ event }) => {\n if (event.type === 'log') {\n return <TraceLogEvent event={event} />\n } else if (event.type === 'emit') {\n return <TraceEmitEvent event={event} />\n } else if (event.type === 'state') {\n return <TraceStateEvent event={event} />\n } else if (event.type === 'stream') {\n return <TraceStreamEvent event={event} />\n }\n})\nTraceEvent.displayName = 'TraceEvent'\n","import type React from 'react'\nimport { Fragment, memo } from 'react'\nimport { formatDuration } from '../../lib/utils'\nimport type { TraceEvent as TraceEventType } from '../../types/observability'\nimport { EventIcon } from '../events/event-icon'\nimport { TraceEvent } from '../events/trace-event'\n\ntype Props = {\n event: TraceEventType\n traceStartTime: number\n}\n\nexport const TraceEventItem: React.FC<Props> = memo(({ event, traceStartTime }) => {\n return (\n <Fragment>\n <div className=\"grid place-items-center\">\n <div className=\"w-1 h-1 rounded-full bg-emerald-500 outline outline-2 outline-emerald-500/50 -ml-[26px]\"></div>\n </div>\n <div className=\"grid place-items-center\">\n <EventIcon event={event} />\n </div>\n <div className=\"grid place-items-center\">\n <span className=\"text-sm font-mono text-muted-foreground\">\n +{formatDuration(Math.floor(event.timestamp - traceStartTime))}\n </span>\n </div>\n <div className=\"grid place-items-start\">\n <TraceEvent event={event} />\n </div>\n </Fragment>\n )\n})\nTraceEventItem.displayName = 'TraceEventItem'\n","import { Badge, Sidebar } from '@motiadev/ui'\nimport { X } from 'lucide-react'\nimport type React from 'react'\nimport { memo, useMemo } from 'react'\nimport { formatDuration } from '../../lib/utils'\nimport type { Trace } from '../../types/observability'\nimport { TraceEventItem } from './trace-event-item'\n\ntype Props = {\n trace: Trace\n onClose: () => void\n}\n\nexport const TraceItemDetail: React.FC<Props> = memo(({ trace, onClose }) => {\n const actions = useMemo(() => [{ icon: <X />, onClick: onClose, label: 'Close' }], [onClose])\n return (\n <Sidebar\n onClose={onClose}\n initialWidth={600}\n title=\"Trace Details\"\n subtitle={`Viewing details from step ${trace.name}`}\n actions={actions}\n >\n <div className=\"px-2 overflow-auto\">\n <div className=\"flex items-center gap-4 text-sm text-muted-foreground mb-4\">\n {trace.endTime && <span>Duration: {formatDuration(trace.endTime - trace.startTime)}</span>}\n <div className=\"bg-blue-500 font-bold text-xs px-[4px] py-[2px] rounded-sm text-blue-100\">\n {trace.entryPoint.type}\n </div>\n {trace.correlationId && <Badge variant=\"outline\">Correlated: {trace.correlationId}</Badge>}\n </div>\n <div className=\"grid grid-cols-[auto_auto_auto_1fr] gap-x-2 gap-y-3 font-mono text-xs border-l-1 border-gray-500/40 pl-6\">\n {trace.events.map((event, index) => (\n <TraceEventItem key={index} event={event} traceStartTime={trace.startTime} />\n ))}\n </div>\n </div>\n {trace.error && (\n <div className=\"p-4 bg-red-800/10\">\n <div className=\"text-sm text-red-800 dark:text-red-400 font-semibold\">{trace.error.message}</div>\n <div className=\"text-sm text-red-800 dark:text-red-400 pl-4\">{trace.error.stack}</div>\n </div>\n )}\n </Sidebar>\n )\n})\nTraceItemDetail.displayName = 'TraceItemDetail'\n","import { useStreamGroup, useStreamItem } from '@motiadev/stream-client-react'\nimport { Button } from '@motiadev/ui'\nimport { Minus, Plus } from 'lucide-react'\nimport type React from 'react'\nimport { memo, useCallback, useMemo, useState } from 'react'\nimport { useGetEndTime } from '../hooks/use-get-endtime'\nimport { formatDuration } from '../lib/utils'\nimport { useObservabilityStore } from '../stores/use-observability-store'\nimport type { Trace, TraceGroup } from '../types/observability'\nimport { TraceItem } from './trace-item/trace-item'\nimport { TraceItemDetail } from './trace-item/trace-item-detail'\n\nexport const TraceTimeline: React.FC = memo(() => {\n const groupId = useObservabilityStore((state) => state.selectedTraceGroupId)\n if (!groupId) return null\n return <TraceTimelineComponent groupId={groupId} />\n})\nTraceTimeline.displayName = 'TraceTimeline'\n\ninterface TraceTimelineComponentProps {\n groupId: string\n}\nconst TraceTimelineComponent: React.FC<TraceTimelineComponentProps> = memo(({ groupId }) => {\n const streamItemArgs = useMemo(\n () => ({ streamName: 'motia-trace-group', groupId: 'default', id: groupId }),\n [groupId],\n )\n const { data: group } = useStreamItem<TraceGroup>(streamItemArgs)\n\n const streamGroupArgs = useMemo(() => ({ streamName: 'motia-trace', groupId }), [groupId])\n const { data } = useStreamGroup<Trace>(streamGroupArgs)\n\n const endTime = useGetEndTime(group)\n const [zoom, setZoom] = useState(1)\n const selectedTraceId = useObservabilityStore((state) => state.selectedTraceId)\n const selectTraceId = useObservabilityStore((state) => state.selectTraceId)\n\n const selectedTrace = useMemo(() => data?.find((trace) => trace.id === selectedTraceId), [data, selectedTraceId])\n\n const zoomMinus = useCallback(() => {\n if (zoom > 0.5) setZoom((prev) => prev - 0.1)\n }, [])\n\n const zoomPlus = useCallback(() => {\n setZoom((prev) => prev + 0.1)\n }, [])\n\n if (!group) return null\n\n return (\n <>\n <div className=\"flex flex-col flex-1 overflow-x-auto h-full relative\">\n <div className=\"flex flex-col items-center min-w-full sticky top-0\" style={{ width: `${zoom * 1000}px` }}>\n <div className=\"flex flex-1 w-full sticky top-0 bg-background z-10\">\n <div className=\"w-full min-h-[37px] h-[37px] min-w-[200px] max-w-[200px] flex items-center justify-center gap-2 sticky left-0 top-0 bg-card backdrop-blur-[4px] backdrop-filter\">\n <Button variant=\"icon\" size=\"sm\" className=\"px-2\" onClick={zoomMinus}>\n <Minus className=\"w-4 h-4 cursor-pointer\" />\n </Button>\n <span className=\"text-sm font-bold text-muted-foreground\">{Math.floor(zoom * 100)}%</span>\n <Button variant=\"icon\" size=\"sm\" className=\"px-2\" onClick={zoomPlus}>\n <Plus className=\"w-4 h-4 cursor-pointer\" />\n </Button>\n </div>\n <div className=\"flex justify-between font-mono p-2 w-full text-xs text-muted-foreground bg-card\">\n <span>{formatDuration(0)}</span>\n <span>{formatDuration(Math.floor((endTime - group.startTime) * 0.25))}</span>\n <span>{formatDuration(Math.floor((endTime - group.startTime) * 0.5))}</span>\n <span>{formatDuration(Math.floor((endTime - group.startTime) * 0.75))}</span>\n <span>{formatDuration(Math.floor(endTime - group.startTime))}</span>\n <div className=\"absolute bottom-[-4px] w-full flex justify-between\">\n <span className=\"w-[1px] h-full bg-blue-500\"></span>\n <span className=\"w-[1px] h-full bg-blue-500\"></span>\n <span className=\"w-[1px] h-full bg-blue-500\"></span>\n <span className=\"w-[1px] h-full bg-blue-500\"></span>\n <span className=\"w-[1px] h-full bg-blue-500\"></span>\n </div>\n </div>\n </div>\n\n <div className=\"flex flex-col w-full h-full\">\n {data?.map((trace) => (\n <TraceItem\n key={trace.id}\n traceId={trace.id}\n traceName={trace.name}\n traceStatus={trace.status}\n traceStartTime={trace.startTime}\n traceEndTime={trace.endTime}\n groupStartTime={group.startTime}\n groupEndTime={endTime}\n onExpand={selectTraceId}\n />\n ))}\n </div>\n </div>\n </div>\n {selectedTrace && <TraceItemDetail trace={selectedTrace} onClose={() => selectTraceId(undefined)} />}\n </>\n )\n})\nTraceTimelineComponent.displayName = 'TraceTimelineComponent'\n","import { useStreamGroup } from '@motiadev/stream-client-react'\nimport { useMemo } from 'react'\nimport { useObservabilityStore } from '../stores/use-observability-store'\nimport type { TraceGroup } from '../types/observability'\n\nexport const useFilteredTraceGroups = () => {\n const streamGroupArgs = useMemo(() => ({ streamName: 'motia-trace-group', groupId: 'default' }), [])\n const { data } = useStreamGroup<TraceGroup>(streamGroupArgs)\n\n const search = useObservabilityStore((state) => state.search)\n\n return useMemo(\n () =>\n data?.filter(\n (group) =>\n group.name.toLowerCase().includes(search.toLowerCase()) ||\n group.id.toLowerCase().includes(search.toLowerCase()),\n ),\n [data, search],\n )\n}\n","import { Badge, type BadgeProps } from '@motiadev/ui'\nimport type React from 'react'\nimport { memo } from 'react'\nimport type { TraceGroup } from '@/types/observability'\n\ntype Props = {\n status: TraceGroup['status']\n duration?: string\n}\n\nconst variantMap = {\n running: 'info',\n completed: 'success',\n failed: 'error',\n default: 'default',\n}\n\nexport const TraceStatusBadge: React.FC<Props> = memo(({ status, duration }) => (\n <Badge variant={variantMap[status] as BadgeProps['variant']}>\n {duration && status !== 'failed' ? duration : status}\n </Badge>\n))\n\nTraceStatusBadge.displayName = 'TraceStatusBadge'\n","import { cn } from '@motiadev/ui'\nimport { formatDistanceToNow } from 'date-fns'\nimport type React from 'react'\nimport { memo, useCallback, useMemo } from 'react'\nimport { formatDuration } from '../lib/utils'\nimport { useObservabilityStore } from '../stores/use-observability-store'\nimport { TraceStatusBadge } from './trace-status'\n\ninterface TraceGroupItemProps {\n groupId: string\n groupName: string\n groupStatus: 'running' | 'completed' | 'failed'\n groupStartTime: number\n groupEndTime: number | undefined\n totalSteps: number\n activeSteps: number\n isSelected: boolean\n}\n\nexport const TraceGroupItem: React.FC<TraceGroupItemProps> = memo(\n ({ groupId, groupName, groupStatus, groupStartTime, groupEndTime, totalSteps, activeSteps, isSelected }) => {\n const selectTraceGroupId = useObservabilityStore((state) => state.selectTraceGroupId)\n\n const duration = useMemo(\n () => (groupEndTime ? formatDuration(groupEndTime - groupStartTime) : undefined),\n [groupEndTime, groupStartTime],\n )\n\n const onSelect = useCallback(() => {\n selectTraceGroupId(groupId)\n }, [groupId, selectTraceGroupId])\n\n return (\n <button\n type=\"button\"\n data-testid={`trace-${groupId}`}\n key={groupId}\n className={cn(\n 'motia-trace-group cursor-pointer transition-colors w-full text-left',\n isSelected ? 'bg-muted-foreground/10' : 'hover:bg-muted/70',\n )}\n onClick={onSelect}\n >\n <div className=\"p-3 flex flex-col gap-1\">\n <div className=\"flex flex-row justify-between items-center gap-2\">\n <span className=\"font-semibold text-lg\">{groupName}</span>\n <TraceStatusBadge status={groupStatus} duration={duration} />\n </div>\n\n <div className=\"text-xs text-muted-foreground space-y-1\">\n <div className=\"flex justify-between\">\n <div data-testid=\"trace-id\" className=\"text-xs text-muted-foreground font-mono tracking-[1px]\">\n {groupId}\n </div>\n <span>{totalSteps} steps</span>\n </div>\n <div className=\"flex justify-between\">{formatDistanceToNow(groupStartTime)} ago</div>\n {activeSteps > 0 && <div className=\"text-blue-600\">{activeSteps} active</div>}\n </div>\n </div>\n </button>\n )\n },\n)\nTraceGroupItem.displayName = 'TraceGroupItem'\n","import type React from 'react'\nimport { memo, useEffect, useMemo } from 'react'\nimport { useFilteredTraceGroups } from '../hooks/use-filtered-trace-groups'\nimport { useObservabilityStore } from '../stores/use-observability-store'\nimport { TraceGroupItem } from './trace-group-item'\n\nexport const TracesGroups: React.FC = memo(() => {\n const groups = useFilteredTraceGroups()\n const selectedGroupId = useObservabilityStore((state) => state.selectedTraceGroupId)\n const selectTraceGroupId = useObservabilityStore((state) => state.selectTraceGroupId)\n\n const groupsLength = useMemo(() => groups?.length || 0, [groups])\n const lastRunningGroupId = useMemo(() => {\n if (!groups || groups.length === 0) return ''\n const lastGroup = groups[groups.length - 1]\n return lastGroup?.status === 'running' ? lastGroup.id : ''\n }, [groups])\n\n useEffect(() => {\n if (lastRunningGroupId && lastRunningGroupId !== selectedGroupId) {\n selectTraceGroupId(lastRunningGroupId)\n } else if (!lastRunningGroupId && !groupsLength && selectedGroupId) {\n selectTraceGroupId('')\n }\n }, [lastRunningGroupId, groupsLength])\n\n const reversedGroups = useMemo(() => [...groups].reverse(), [groups])\n\n if (!groups || groups.length === 0) {\n return null\n }\n\n return (\n <div className=\"overflow-auto\">\n {reversedGroups.map((group) => (\n <TraceGroupItem\n key={group.id}\n groupId={group.id}\n groupName={group.name}\n groupStatus={group.status}\n groupStartTime={group.startTime}\n groupEndTime={group.endTime}\n totalSteps={group.metadata.totalSteps}\n activeSteps={group.metadata.activeSteps}\n isSelected={selectedGroupId === group.id}\n />\n ))}\n </div>\n )\n})\nTracesGroups.displayName = 'TracesGroups'\n","import { memo } from 'react'\nimport { SearchBar } from './search-bar'\nimport { TraceEmptyState } from './trace-empty-state'\nimport { TraceTimeline } from './trace-timeline'\nimport { TracesGroups } from './traces-groups'\n\nexport const ObservabilityPage = memo(() => {\n return (\n <div className=\"grid grid-rows-[auto_1fr] h-full\">\n <SearchBar />\n\n <div className=\"grid grid-cols-[300px_1fr] overflow-hidden\">\n <div className=\"w-[300px] border-r border-border overflow-auto h-full\" data-testid=\"traces-container\">\n <TracesGroups />\n </div>\n\n <div className=\"overflow-auto\" data-testid=\"trace-details\">\n <TraceTimeline />\n <TraceEmptyState />\n </div>\n </div>\n </div>\n )\n})\nObservabilityPage.displayName = 'ObservabilityPage'\n","import { GanttChartSquare } from 'lucide-react'\nimport { memo } from 'react'\n\nexport const ObservabilityTabLabel = memo(() => (\n <div data-testid=\"observability-link\">\n <GanttChartSquare aria-hidden=\"true\" />\n <span>Tracing</span>\n </div>\n))\nObservabilityTabLabel.displayName = 'ObservabilityTabLabel'\n"],"x_google_ignoreList":[0,1,2],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["TraceEmptyState: React.FC","interval: NodeJS.Timeout","TraceItem: React.FC<Props>","EventIcon: React.FC<Props>","CopyButton: React.FC<CopyButtonProps>","Popover: FC<ComponentProps<typeof PopoverPrimitive.Root>>","PopoverTrigger: FC<ComponentProps<typeof PopoverPrimitive.Trigger>>","PopoverContent: FC<ComponentProps<typeof PopoverPrimitive.Content>>","Argument: React.FC<ArgumentProps>","ClosingParenthesis: React.FC<ClosingParenthesisProps>","FunctionCall: React.FC<Props>","TraceEmitEvent: React.FC<{ event: EmitEvent }>","TraceLogEvent: React.FC<{ event: LogEntry }>","TraceStateEvent: React.FC<{ event: StateEvent }>","TraceStreamEvent: React.FC<{ event: StreamEvent }>","TraceEvent: React.FC<{ event: TraceEventType }>","TraceEventItem: React.FC<Props>","TraceItemDetail: React.FC<Props>","TraceTimeline: React.FC","TraceTimelineComponent: React.FC<TraceTimelineComponentProps>","TraceStatusBadge: React.FC<Props>","TraceGroupItem: React.FC<TraceGroupItemProps>","TracesGroups: React.FC"],"sources":["../src/stores/use-observability-store.ts","../src/components/search-bar.tsx","../src/components/trace-empty-state.tsx","../src/hooks/use-get-endtime.ts","../src/lib/utils.ts","../src/components/trace-item/trace-item.tsx","../src/components/events/event-icon.tsx","../src/components/ui/copy-button.tsx","../src/components/ui/popover.tsx","../src/components/events/code/utils.ts","../src/components/events/code/argument.tsx","../src/components/events/code/closing-parenthesis.tsx","../src/components/events/code/function-call-content.tsx","../src/components/events/code/function-call.tsx","../src/components/events/trace-emit-event.tsx","../src/components/events/trace-log-event.tsx","../src/components/events/trace-state-event.tsx","../src/components/events/trace-stream-event.tsx","../src/components/events/trace-event.tsx","../src/components/trace-item/trace-event-item.tsx","../src/components/trace-item/trace-item-detail.tsx","../src/components/trace-timeline.tsx","../src/hooks/use-filtered-trace-groups.ts","../src/components/trace-status.tsx","../src/components/trace-group-item.tsx","../src/components/traces-groups.tsx","../src/components/observability-page.tsx","../src/components/observability-tab-label.tsx"],"sourcesContent":["import { create } from 'zustand'\n\nexport type ObservabilityState = {\n selectedTraceGroupId: string\n selectedTraceId?: string\n search: string\n selectTraceGroupId: (groupId?: string) => void\n selectTraceId: (traceId?: string) => void\n setSearch: (search: string) => void\n clearTraces: () => void\n}\n\nexport const useObservabilityStore = create<ObservabilityState>()((set) => ({\n selectedTraceGroupId: '',\n selectedTraceId: undefined,\n search: '',\n selectTraceGroupId: (groupId) => set({ selectedTraceGroupId: groupId }),\n selectTraceId: (traceId) => set({ selectedTraceId: traceId }),\n setSearch: (search) => set({ search }),\n clearTraces: () => {\n fetch('/__motia/trace/clear', { method: 'POST' })\n },\n}))\n","import { Button, cn, Input } from '@motiadev/ui'\nimport { Search, Trash, X } from 'lucide-react'\nimport { memo } from 'react'\nimport { useObservabilityStore } from '../stores/use-observability-store'\n\nexport const SearchBar = memo(() => {\n const search = useObservabilityStore((state) => state.search)\n const setSearch = useObservabilityStore((state) => state.setSearch)\n const clearTraces = useObservabilityStore((state) => state.clearTraces)\n\n return (\n <div className=\"flex p-2 border-b gap-2\" data-testid=\"logs-search-container\">\n <div className=\"flex-1 relative\">\n <Input\n variant=\"shade\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"px-9! font-medium\"\n placeholder=\"Search by Trace ID or Step Name\"\n />\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground/50\" />\n <X\n className={cn(\n 'cursor-pointer absolute right-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground/50 hover:text-muted-foreground',\n {\n visible: search !== '',\n invisible: search === '',\n },\n )}\n onClick={() => setSearch('')}\n />\n </div>\n <Button variant=\"default\" onClick={clearTraces} className=\"h-[34px]\">\n <Trash /> Clear\n </Button>\n </div>\n )\n})\n\nSearchBar.displayName = 'SearchBar'\n","import { memo } from 'react'\nimport { useObservabilityStore } from '../stores/use-observability-store'\n\nexport const TraceEmptyState: React.FC = memo(() => {\n const selectedGroupId = useObservabilityStore((state) => state.selectedTraceGroupId)\n\n if (selectedGroupId) {\n return null\n }\n\n return (\n <div className=\"flex items-center justify-center h-full text-muted-foreground\">\n Select a trace or trace group to view the timeline\n </div>\n )\n})\nTraceEmptyState.displayName = 'TraceEmptyState'\n","import { useEffect, useState } from 'react'\nimport type { TraceGroup } from '../types/observability'\n\nexport const useGetEndTime = (group: TraceGroup | undefined | null) => {\n const groupEndTime = group?.endTime\n const [endTime, setEndTime] = useState(() => groupEndTime || Date.now())\n\n useEffect(() => {\n let interval: NodeJS.Timeout\n if (groupEndTime) {\n if (groupEndTime !== endTime) {\n setEndTime(groupEndTime)\n }\n } else {\n interval = setInterval(() => setEndTime(Date.now()), 100)\n }\n\n return () => clearInterval(interval)\n }, [groupEndTime, endTime])\n\n return endTime\n}\n","export const formatDuration = (duration?: number) => {\n if (duration === undefined || duration === null) return 'N/A'\n if (duration < 1000) return `${duration}ms`\n if (duration < 60000) return `${(duration / 1000).toFixed(1)}s`\n if (duration < 3600000) return `${(duration / 60000).toFixed(1)}min`\n return `${(duration / 3600000).toFixed(1)}h`\n}\n","import { cn } from '@motiadev/ui'\nimport type React from 'react'\nimport { memo, useCallback, useMemo } from 'react'\n\nconst GRADIENT_CLASSES = {\n running: 'bg-[repeating-linear-gradient(140deg,#BEFE29,#BEFE29_8px,#ABE625_8px,#ABE625_16px)]',\n completed: 'bg-[repeating-linear-gradient(140deg,#2862FE,#2862FE_8px,#2358E5_8px,#2358E5_16px)]',\n failed: 'bg-[repeating-linear-gradient(140deg,#EA2069,#EA2069_8px,#D41E60_8px,#D41E60_16px)]',\n} as const\n\ntype Props = {\n traceId: string\n traceName: string\n traceStatus: 'running' | 'completed' | 'failed'\n traceStartTime: number\n traceEndTime: number | undefined\n groupStartTime: number\n groupEndTime: number\n onExpand: (traceId: string) => void\n}\n\nexport const TraceItem: React.FC<Props> = memo(\n ({ traceId, traceName, traceStatus, traceStartTime, traceEndTime, groupStartTime, groupEndTime, onExpand }) => {\n const handleClick = useCallback(() => {\n onExpand(traceId)\n }, [onExpand, traceId])\n\n const barClassName = useMemo(\n () => cn('h-[24px] rounded-[4px] hover:opacity-80 transition-all duration-200', GRADIENT_CLASSES[traceStatus]),\n [traceStatus],\n )\n\n const barStyle = useMemo(\n () => ({\n marginLeft: `${((traceStartTime - groupStartTime) / (groupEndTime - groupStartTime)) * 100}%`,\n width: traceEndTime\n ? `${((traceEndTime - traceStartTime) / (groupEndTime - groupStartTime)) * 100}%`\n : `${((Date.now() - traceStartTime) / (groupEndTime - groupStartTime)) * 100}%`,\n }),\n [traceStartTime, traceEndTime, groupStartTime, groupEndTime],\n )\n\n return (\n <div\n className=\"flex hover:bg-muted-foreground/10 relative cursor-pointer\"\n onClick={handleClick}\n data-testid=\"trace-timeline-item\"\n >\n <div className=\"flex items-center min-w-[200px] max-w-[200px] h-[32px] max-h-[32px] py-4 px-2 text-sm font-semibold text-foreground truncate sticky left-0 bg-card z-9\">\n {traceName}\n </div>\n <div className=\"flex w-full flex-row items-center hover:bg-muted/50 rounded-md\">\n <div className=\"relative w-full h-[32px] flex items-center\">\n <div className={barClassName} style={barStyle} />\n </div>\n </div>\n </div>\n )\n },\n)\nTraceItem.displayName = 'TraceItem'\n","import { MessageCircle, Package, Radio, ScrollText } from 'lucide-react'\nimport type React from 'react'\nimport type { TraceEvent as TraceEventType } from '../../types/observability'\n\ntype Props = {\n event: TraceEventType\n}\n\nexport const EventIcon: React.FC<Props> = ({ event }) => {\n if (event.type === 'log') {\n return <ScrollText className=\"w-4 h-4 text-muted-foreground\" />\n } else if (event.type === 'emit') {\n return <MessageCircle className=\"w-4 h-4 text-muted-foreground\" />\n } else if (event.type === 'state') {\n return <Package className=\"w-4 h-4 text-muted-foreground\" />\n } else if (event.type === 'stream') {\n return <Radio className=\"w-4 h-4 text-muted-foreground\" />\n }\n}\n","import { Button, cn } from '@motiadev/ui'\nimport { Check, Copy } from 'lucide-react'\nimport { useCallback, useState } from 'react'\n\ntype CopyButtonProps = {\n textToCopy: string\n className?: string\n title?: string\n}\n\nexport const CopyButton: React.FC<CopyButtonProps> = ({ textToCopy, className, title }) => {\n const [copied, setCopied] = useState(false)\n\n const handleCopy = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(textToCopy)\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n } catch (error) {\n console.error('Failed to copy:', error)\n }\n }, [textToCopy])\n\n return (\n <Button\n variant=\"icon\"\n size=\"icon\"\n onClick={handleCopy}\n className={cn('cursor-pointer p-3 rounded-full', className)}\n title={title ?? (copied ? 'Copied!' : 'Copy')}\n >\n {copied ? <Check className=\"w-4 h-4 text-green-500\" /> : <Copy className=\"w-4 h-4 text-gray-400\" />}\n </Button>\n )\n}\n","import { cn } from '@motiadev/ui'\nimport * as PopoverPrimitive from '@radix-ui/react-popover'\nimport type { ComponentProps, FC } from 'react'\n\nexport const Popover: FC<ComponentProps<typeof PopoverPrimitive.Root>> = ({ ...props }) => {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nexport const PopoverTrigger: FC<ComponentProps<typeof PopoverPrimitive.Trigger>> = ({ ...props }) => {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />\n}\n\nexport const PopoverContent: FC<ComponentProps<typeof PopoverPrimitive.Content>> = ({\n className,\n align = 'center',\n sideOffset = 4,\n ...props\n}) => {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden',\n className,\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n )\n}\n\nexport const PopoverAnchor: FC<ComponentProps<typeof PopoverPrimitive.Anchor>> = ({ ...props }) => {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />\n}\n","export const formatArgumentValue = (arg: string | object | false | null): string => {\n if (typeof arg === 'object' && arg !== null) {\n return JSON.stringify(arg, null, 1)\n }\n if (arg === null) {\n return 'null'\n }\n\n return arg.toString()\n}\n","import { memo, useMemo } from 'react'\nimport ReactJson from 'react18-json-view'\nimport { CopyButton } from '../../../components/ui/copy-button'\nimport { Popover, PopoverContent, PopoverTrigger } from '../../../components/ui/popover'\nimport 'react18-json-view/src/dark.css'\nimport 'react18-json-view/src/style.css'\nimport { formatArgumentValue } from './utils'\n\ntype ArgumentProps = {\n arg: string | object | false\n popover?: boolean\n}\n\nexport const Argument: React.FC<ArgumentProps> = memo(({ arg, popover = true }) => {\n const isObject = useMemo(() => typeof arg === 'object' && arg !== null, [arg])\n\n const value = useMemo(() => formatArgumentValue(arg), [arg])\n\n const textToCopy = useMemo(() => JSON.stringify(arg, null, 2), [arg])\n\n if (!popover) {\n return (\n <>\n {isObject ? (\n <ReactJson src={arg} theme=\"default\" enableClipboard={false} style={{ padding: 0 }} />\n ) : (\n <span className=\"font-mono text-blue-500\">{value}</span>\n )}\n </>\n )\n }\n\n return (\n <Popover>\n <PopoverTrigger asChild>\n <span className=\"truncate font-mono text-blue-500 cursor-pointer inline-block\">{value}</span>\n </PopoverTrigger>\n <PopoverContent\n className=\"backdrop-blur-md w-auto max-w-2xl relative max-h-[50vh] overflow-y-auto\"\n hideWhenDetached\n >\n {isObject ? (\n <div>\n <CopyButton textToCopy={textToCopy} className=\"absolute top-4 right-4\" title=\"Copy JSON\" />\n <ReactJson src={arg} theme=\"default\" enableClipboard={false} style={{ padding: 0 }} />\n </div>\n ) : (\n <div className=\"flex items-center justify-between\">\n <span>{value}</span>\n <CopyButton textToCopy={textToCopy} className=\"ml-2\" title=\"Copy JSON\" />\n </div>\n )}\n </PopoverContent>\n </Popover>\n )\n})\nArgument.displayName = 'Argument'\n","import { memo } from 'react'\n\ntype ClosingParenthesisProps = {\n callsQuantity?: number\n noQuantity?: boolean\n}\n\nexport const ClosingParenthesis: React.FC<ClosingParenthesisProps> = memo(({ callsQuantity, noQuantity = false }) => {\n const hasCalls = callsQuantity && callsQuantity > 1\n\n return (\n <div className=\"flex items-center\">\n <span className=\"font-mono text-emerald-500\">)</span>\n {!noQuantity && hasCalls && <span className=\"font-mono text-muted-foreground\"> x{callsQuantity}</span>}\n </div>\n )\n})\nClosingParenthesis.displayName = 'ClosingParenthesis'\n","import { cn } from '@motiadev/ui'\nimport { forwardRef } from 'react'\n\ntype FunctionCallContentProps = {\n topLevelClassName?: string\n objectName?: string\n functionName: string\n className?: string\n}\n\nexport const FunctionCallContent = forwardRef<HTMLDivElement, FunctionCallContentProps>(\n ({ topLevelClassName, objectName, functionName, className, ...props }, ref) => {\n return (\n <div ref={ref} className={cn('flex items-center', className)} {...props}>\n {topLevelClassName && (\n <>\n <span className=\"font-mono text-pink-500\">{topLevelClassName}</span>\n <span>.</span>\n </>\n )}\n {objectName && (\n <>\n <span className=\"font-mono text-pink-500\">{objectName}</span>\n <span>.</span>\n </>\n )}\n <span className=\"font-mono text-pink-500\">{functionName}</span>\n <span className=\"font-mono text-emerald-500\">(</span>\n </div>\n )\n },\n)\nFunctionCallContent.displayName = 'FunctionCallContent'\n","import { Fragment, memo, useMemo } from 'react'\nimport { CopyButton } from '../../../components/ui/copy-button'\nimport { Popover, PopoverContent, PopoverTrigger } from '../../../components/ui/popover'\nimport { Argument } from './argument'\nimport { ClosingParenthesis } from './closing-parenthesis'\nimport { FunctionCallContent } from './function-call-content'\n\ntype Props = {\n topLevelClassName?: string\n objectName?: string\n functionName: string\n args: Array<string | object | false | undefined>\n callsQuantity?: number\n}\n\nconst GRID_LAYOUT_STYLE = { gridTemplateColumns: 'max-content 1fr max-content' }\n\nexport const FunctionCall: React.FC<Props> = memo(\n ({ topLevelClassName, objectName, functionName, args, callsQuantity }) => {\n const filteredArgs = useMemo(() => args.filter((arg) => arg !== undefined), [args])\n\n const argsGridStyle = useMemo(\n () => ({ gridTemplateColumns: `repeat(${filteredArgs.length * 2}, minmax(0, auto))` }),\n [filteredArgs.length],\n )\n\n const functionCallText = useMemo(() => {\n const prefix = [topLevelClassName, objectName].filter(Boolean).join('.')\n const fullPrefix = prefix ? `${prefix}.` : ''\n const argsString = filteredArgs\n .map((arg) => {\n if (typeof arg === 'object' && arg !== null) {\n return JSON.stringify(arg, null, 2)\n }\n if (arg === null) {\n return 'null'\n }\n if (typeof arg === 'string') {\n return `'${arg}'`\n }\n return String(arg)\n })\n .join(', ')\n return `${fullPrefix}${functionName}(${argsString})`\n }, [topLevelClassName, objectName, functionName, filteredArgs])\n\n return (\n <div className=\"grid overflow-hidden items-center\" style={GRID_LAYOUT_STYLE}>\n <Popover>\n <PopoverTrigger asChild>\n <FunctionCallContent\n className=\"cursor-pointer\"\n functionName={functionName}\n topLevelClassName={topLevelClassName}\n objectName={objectName}\n />\n </PopoverTrigger>\n <PopoverContent\n className=\"grid grid-rows-auto backdrop-blur-md w-auto max-w-2xl max-h-[50vh] overflow-y-auto\"\n hideWhenDetached\n >\n <div className=\"flex items-center justify-between gap-2\">\n <FunctionCallContent\n functionName={functionName}\n topLevelClassName={topLevelClassName}\n objectName={objectName}\n />\n <CopyButton textToCopy={functionCallText} />\n </div>\n {filteredArgs.map((arg, index) => (\n <div key={index} className=\"grid grid-cols-[auto_1fr] items-center pl-4\">\n <Argument arg={arg} popover={false} />\n {index < filteredArgs.length - 1 && <span>, </span>}\n </div>\n ))}\n <ClosingParenthesis callsQuantity={callsQuantity} noQuantity />\n </PopoverContent>\n </Popover>\n <div className=\"grid items-center min-w-0\" style={argsGridStyle}>\n {filteredArgs.map((arg, index) => (\n <Fragment key={index}>\n <Argument arg={arg} />\n {index < filteredArgs.length - 1 && <span>, </span>}\n </Fragment>\n ))}\n </div>\n <ClosingParenthesis callsQuantity={callsQuantity} />\n </div>\n )\n },\n)\nFunctionCall.displayName = 'FunctionCall'\n","import type React from 'react'\nimport { memo, useMemo } from 'react'\nimport type { EmitEvent } from '../../types/observability'\nimport { FunctionCall } from './code/function-call'\n\nexport const TraceEmitEvent: React.FC<{ event: EmitEvent }> = memo(({ event }) => {\n const args = useMemo(() => [{ topic: event.topic, data: event.data }], [event])\n return <FunctionCall functionName=\"emit\" args={args} />\n})\nTraceEmitEvent.displayName = 'TraceEmitEvent'\n","import { LevelDot } from '@motiadev/ui'\nimport type React from 'react'\nimport { memo } from 'react'\nimport type { LogEntry } from '../../types/observability'\n\nexport const TraceLogEvent: React.FC<{ event: LogEntry }> = memo(({ event }) => {\n return (\n <div className=\"flex items-center gap-2\">\n <LevelDot level={event.level} /> {event.message}\n </div>\n )\n})\nTraceLogEvent.displayName = 'TraceLogEvent'\n","import type React from 'react'\nimport { memo, useMemo } from 'react'\nimport type { StateEvent } from '../../types/observability'\nimport { FunctionCall } from './code/function-call'\nexport const TraceStateEvent: React.FC<{ event: StateEvent }> = memo(({ event }) => {\n const args = useMemo(() => [event.data.traceId, event.data.key, event.data.value], [event])\n return <FunctionCall objectName=\"state\" functionName={event.operation} args={args} />\n})\nTraceStateEvent.displayName = 'TraceStateEvent'\n","import type React from 'react'\nimport { memo, useMemo } from 'react'\nimport type { StreamEvent } from '../../types/observability'\nimport { FunctionCall } from './code/function-call'\n\nexport const TraceStreamEvent: React.FC<{ event: StreamEvent }> = memo(({ event }) => {\n const args = useMemo(\n () => [event.data.groupId, event.data.id, event.data.data as unknown as Array<string | object | false | undefined>],\n [event],\n )\n return (\n <FunctionCall\n topLevelClassName=\"streams\"\n objectName={event.streamName}\n functionName={event.operation}\n args={args}\n callsQuantity={event.calls}\n />\n )\n})\nTraceStreamEvent.displayName = 'TraceStreamEvent'\n","import type React from 'react'\nimport { memo } from 'react'\nimport type { TraceEvent as TraceEventType } from '../../types/observability'\nimport { TraceEmitEvent } from './trace-emit-event'\nimport { TraceLogEvent } from './trace-log-event'\nimport { TraceStateEvent } from './trace-state-event'\nimport { TraceStreamEvent } from './trace-stream-event'\n\nexport const TraceEvent: React.FC<{ event: TraceEventType }> = memo(({ event }) => {\n if (event.type === 'log') {\n return <TraceLogEvent event={event} />\n } else if (event.type === 'emit') {\n return <TraceEmitEvent event={event} />\n } else if (event.type === 'state') {\n return <TraceStateEvent event={event} />\n } else if (event.type === 'stream') {\n return <TraceStreamEvent event={event} />\n }\n})\nTraceEvent.displayName = 'TraceEvent'\n","import type React from 'react'\nimport { Fragment, memo } from 'react'\nimport { formatDuration } from '../../lib/utils'\nimport type { TraceEvent as TraceEventType } from '../../types/observability'\nimport { EventIcon } from '../events/event-icon'\nimport { TraceEvent } from '../events/trace-event'\n\ntype Props = {\n event: TraceEventType\n traceStartTime: number\n}\n\nexport const TraceEventItem: React.FC<Props> = memo(({ event, traceStartTime }) => {\n return (\n <Fragment>\n <div className=\"grid place-items-center\">\n <div className=\"w-1 h-1 rounded-full bg-emerald-500 outline outline-2 outline-emerald-500/50 -ml-[26px]\"></div>\n </div>\n <div className=\"grid place-items-center\">\n <EventIcon event={event} />\n </div>\n <div className=\"grid place-items-center\">\n <span className=\"text-sm font-mono text-muted-foreground\">\n +{formatDuration(Math.floor(event.timestamp - traceStartTime))}\n </span>\n </div>\n <div className=\"grid place-items-start\">\n <TraceEvent event={event} />\n </div>\n </Fragment>\n )\n})\nTraceEventItem.displayName = 'TraceEventItem'\n","import { Badge, Sidebar } from '@motiadev/ui'\nimport { X } from 'lucide-react'\nimport type React from 'react'\nimport { memo, useMemo } from 'react'\nimport { formatDuration } from '../../lib/utils'\nimport type { Trace } from '../../types/observability'\nimport { TraceEventItem } from './trace-event-item'\n\ntype Props = {\n trace: Trace\n onClose: () => void\n}\n\nexport const TraceItemDetail: React.FC<Props> = memo(({ trace, onClose }) => {\n const actions = useMemo(() => [{ icon: <X />, onClick: onClose, label: 'Close' }], [onClose])\n return (\n <Sidebar\n onClose={onClose}\n initialWidth={600}\n title=\"Trace Details\"\n subtitle={`Viewing details from step ${trace.name}`}\n actions={actions}\n >\n <div className=\"px-2 overflow-auto\">\n <div className=\"flex items-center gap-4 text-sm text-muted-foreground mb-4\">\n {trace.endTime && <span>Duration: {formatDuration(trace.endTime - trace.startTime)}</span>}\n <div className=\"bg-blue-500 font-bold text-xs px-[4px] py-[2px] rounded-sm text-blue-100\">\n {trace.entryPoint.type}\n </div>\n {trace.correlationId && <Badge variant=\"outline\">Correlated: {trace.correlationId}</Badge>}\n </div>\n <div className=\"grid grid-cols-[auto_auto_auto_1fr] gap-x-2 gap-y-3 font-mono text-xs border-l-1 border-gray-500/40 pl-6\">\n {trace.events.map((event, index) => (\n <TraceEventItem key={index} event={event} traceStartTime={trace.startTime} />\n ))}\n </div>\n </div>\n {trace.error && (\n <div className=\"p-4 bg-red-800/10\">\n <div className=\"text-sm text-red-800 dark:text-red-400 font-semibold\">{trace.error.message}</div>\n <div className=\"text-sm text-red-800 dark:text-red-400 pl-4\">{trace.error.stack}</div>\n </div>\n )}\n </Sidebar>\n )\n})\nTraceItemDetail.displayName = 'TraceItemDetail'\n","import { useStreamGroup, useStreamItem } from '@motiadev/stream-client-react'\nimport { Button } from '@motiadev/ui'\nimport { Minus, Plus } from 'lucide-react'\nimport type React from 'react'\nimport { memo, useCallback, useMemo, useState } from 'react'\nimport { useGetEndTime } from '../hooks/use-get-endtime'\nimport { formatDuration } from '../lib/utils'\nimport { useObservabilityStore } from '../stores/use-observability-store'\nimport type { Trace, TraceGroup } from '../types/observability'\nimport { TraceItem } from './trace-item/trace-item'\nimport { TraceItemDetail } from './trace-item/trace-item-detail'\n\nexport const TraceTimeline: React.FC = memo(() => {\n const groupId = useObservabilityStore((state) => state.selectedTraceGroupId)\n if (!groupId) return null\n return <TraceTimelineComponent groupId={groupId} />\n})\nTraceTimeline.displayName = 'TraceTimeline'\n\ninterface TraceTimelineComponentProps {\n groupId: string\n}\nconst TraceTimelineComponent: React.FC<TraceTimelineComponentProps> = memo(({ groupId }) => {\n const streamItemArgs = useMemo(\n () => ({ streamName: 'motia-trace-group', groupId: 'default', id: groupId }),\n [groupId],\n )\n const { data: group } = useStreamItem<TraceGroup>(streamItemArgs)\n\n const streamGroupArgs = useMemo(() => ({ streamName: 'motia-trace', groupId }), [groupId])\n const { data } = useStreamGroup<Trace>(streamGroupArgs)\n\n const endTime = useGetEndTime(group)\n const [zoom, setZoom] = useState(1)\n const selectedTraceId = useObservabilityStore((state) => state.selectedTraceId)\n const selectTraceId = useObservabilityStore((state) => state.selectTraceId)\n\n const selectedTrace = useMemo(() => data?.find((trace) => trace.id === selectedTraceId), [data, selectedTraceId])\n\n const zoomMinus = useCallback(() => {\n if (zoom > 0.5) setZoom((prev) => prev - 0.1)\n }, [])\n\n const zoomPlus = useCallback(() => {\n setZoom((prev) => prev + 0.1)\n }, [])\n\n if (!group) return null\n\n return (\n <>\n <div className=\"flex flex-col flex-1 overflow-x-auto h-full relative\">\n <div className=\"flex flex-col items-center min-w-full sticky top-0\" style={{ width: `${zoom * 1000}px` }}>\n <div className=\"flex flex-1 w-full sticky top-0 bg-background z-10\">\n <div className=\"w-full min-h-[37px] h-[37px] min-w-[200px] max-w-[200px] flex items-center justify-center gap-2 sticky left-0 top-0 bg-card backdrop-blur-[4px] backdrop-filter\">\n <Button variant=\"icon\" size=\"sm\" className=\"px-2\" onClick={zoomMinus}>\n <Minus className=\"w-4 h-4 cursor-pointer\" />\n </Button>\n <span className=\"text-sm font-bold text-muted-foreground\">{Math.floor(zoom * 100)}%</span>\n <Button variant=\"icon\" size=\"sm\" className=\"px-2\" onClick={zoomPlus}>\n <Plus className=\"w-4 h-4 cursor-pointer\" />\n </Button>\n </div>\n <div className=\"flex justify-between font-mono p-2 w-full text-xs text-muted-foreground bg-card\">\n <span>{formatDuration(0)}</span>\n <span>{formatDuration(Math.floor((endTime - group.startTime) * 0.25))}</span>\n <span>{formatDuration(Math.floor((endTime - group.startTime) * 0.5))}</span>\n <span>{formatDuration(Math.floor((endTime - group.startTime) * 0.75))}</span>\n <span>{formatDuration(Math.floor(endTime - group.startTime))}</span>\n <div className=\"absolute bottom-[-4px] w-full flex justify-between\">\n <span className=\"w-[1px] h-full bg-blue-500\"></span>\n <span className=\"w-[1px] h-full bg-blue-500\"></span>\n <span className=\"w-[1px] h-full bg-blue-500\"></span>\n <span className=\"w-[1px] h-full bg-blue-500\"></span>\n <span className=\"w-[1px] h-full bg-blue-500\"></span>\n </div>\n </div>\n </div>\n\n <div className=\"flex flex-col w-full h-full\">\n {data?.map((trace) => (\n <TraceItem\n key={trace.id}\n traceId={trace.id}\n traceName={trace.name}\n traceStatus={trace.status}\n traceStartTime={trace.startTime}\n traceEndTime={trace.endTime}\n groupStartTime={group.startTime}\n groupEndTime={endTime}\n onExpand={selectTraceId}\n />\n ))}\n </div>\n </div>\n </div>\n {selectedTrace && <TraceItemDetail trace={selectedTrace} onClose={() => selectTraceId(undefined)} />}\n </>\n )\n})\nTraceTimelineComponent.displayName = 'TraceTimelineComponent'\n","import { useStreamGroup } from '@motiadev/stream-client-react'\nimport { useMemo } from 'react'\nimport { useObservabilityStore } from '../stores/use-observability-store'\nimport type { TraceGroup } from '../types/observability'\n\nexport const useFilteredTraceGroups = () => {\n const streamGroupArgs = useMemo(() => ({ streamName: 'motia-trace-group', groupId: 'default' }), [])\n const { data } = useStreamGroup<TraceGroup>(streamGroupArgs)\n\n const search = useObservabilityStore((state) => state.search)\n\n return useMemo(\n () =>\n data?.filter(\n (group) =>\n group.name.toLowerCase().includes(search.toLowerCase()) ||\n group.id.toLowerCase().includes(search.toLowerCase()),\n ),\n [data, search],\n )\n}\n","import { Badge, type BadgeProps } from '@motiadev/ui'\nimport type React from 'react'\nimport { memo } from 'react'\nimport type { TraceGroup } from '@/types/observability'\n\ntype Props = {\n status: TraceGroup['status']\n duration?: string\n}\n\nconst variantMap = {\n running: 'info',\n completed: 'success',\n failed: 'error',\n default: 'default',\n}\n\nexport const TraceStatusBadge: React.FC<Props> = memo(({ status, duration }) => (\n <Badge variant={variantMap[status] as BadgeProps['variant']}>\n {duration && status !== 'failed' ? duration : status}\n </Badge>\n))\n\nTraceStatusBadge.displayName = 'TraceStatusBadge'\n","import { cn } from '@motiadev/ui'\nimport { formatDistanceToNow } from 'date-fns'\nimport type React from 'react'\nimport { memo, useCallback, useMemo } from 'react'\nimport { formatDuration } from '../lib/utils'\nimport { useObservabilityStore } from '../stores/use-observability-store'\nimport { TraceStatusBadge } from './trace-status'\n\ninterface TraceGroupItemProps {\n groupId: string\n groupName: string\n groupStatus: 'running' | 'completed' | 'failed'\n groupStartTime: number\n groupEndTime: number | undefined\n totalSteps: number\n activeSteps: number\n isSelected: boolean\n}\n\nexport const TraceGroupItem: React.FC<TraceGroupItemProps> = memo(\n ({ groupId, groupName, groupStatus, groupStartTime, groupEndTime, totalSteps, activeSteps, isSelected }) => {\n const selectTraceGroupId = useObservabilityStore((state) => state.selectTraceGroupId)\n\n const duration = useMemo(\n () => (groupEndTime ? formatDuration(groupEndTime - groupStartTime) : undefined),\n [groupEndTime, groupStartTime],\n )\n\n const onSelect = useCallback(() => {\n selectTraceGroupId(groupId)\n }, [groupId, selectTraceGroupId])\n\n return (\n <button\n type=\"button\"\n data-testid={`trace-${groupId}`}\n key={groupId}\n className={cn(\n 'motia-trace-group cursor-pointer transition-colors w-full text-left',\n isSelected ? 'bg-muted-foreground/10' : 'hover:bg-muted/70',\n )}\n onClick={onSelect}\n >\n <div className=\"p-3 flex flex-col gap-1\">\n <div className=\"flex flex-row justify-between items-center gap-2\">\n <span className=\"font-semibold text-lg\">{groupName}</span>\n <TraceStatusBadge status={groupStatus} duration={duration} />\n </div>\n\n <div className=\"text-xs text-muted-foreground space-y-1\">\n <div className=\"flex justify-between\">\n <div data-testid=\"trace-id\" className=\"text-xs text-muted-foreground font-mono tracking-[1px]\">\n {groupId}\n </div>\n <span>{totalSteps} steps</span>\n </div>\n <div className=\"flex justify-between\">{formatDistanceToNow(groupStartTime)} ago</div>\n {activeSteps > 0 && <div className=\"text-blue-600\">{activeSteps} active</div>}\n </div>\n </div>\n </button>\n )\n },\n)\nTraceGroupItem.displayName = 'TraceGroupItem'\n","import type React from 'react'\nimport { memo, useEffect, useMemo } from 'react'\nimport { useFilteredTraceGroups } from '../hooks/use-filtered-trace-groups'\nimport { useObservabilityStore } from '../stores/use-observability-store'\nimport { TraceGroupItem } from './trace-group-item'\n\nexport const TracesGroups: React.FC = memo(() => {\n const groups = useFilteredTraceGroups()\n const selectedGroupId = useObservabilityStore((state) => state.selectedTraceGroupId)\n const selectTraceGroupId = useObservabilityStore((state) => state.selectTraceGroupId)\n\n const groupsLength = useMemo(() => groups?.length || 0, [groups])\n const lastRunningGroupId = useMemo(() => {\n if (!groups || groups.length === 0) return ''\n const lastGroup = groups[groups.length - 1]\n return lastGroup?.status === 'running' ? lastGroup.id : ''\n }, [groups])\n\n useEffect(() => {\n if (lastRunningGroupId && lastRunningGroupId !== selectedGroupId) {\n selectTraceGroupId(lastRunningGroupId)\n } else if (!lastRunningGroupId && !groupsLength && selectedGroupId) {\n selectTraceGroupId('')\n }\n }, [lastRunningGroupId, groupsLength])\n\n const reversedGroups = useMemo(() => [...groups].reverse(), [groups])\n\n if (!groups || groups.length === 0) {\n return null\n }\n\n return (\n <div className=\"overflow-auto\">\n {reversedGroups.map((group) => (\n <TraceGroupItem\n key={group.id}\n groupId={group.id}\n groupName={group.name}\n groupStatus={group.status}\n groupStartTime={group.startTime}\n groupEndTime={group.endTime}\n totalSteps={group.metadata.totalSteps}\n activeSteps={group.metadata.activeSteps}\n isSelected={selectedGroupId === group.id}\n />\n ))}\n </div>\n )\n})\nTracesGroups.displayName = 'TracesGroups'\n","import { memo } from 'react'\nimport { SearchBar } from './search-bar'\nimport { TraceEmptyState } from './trace-empty-state'\nimport { TraceTimeline } from './trace-timeline'\nimport { TracesGroups } from './traces-groups'\n\nexport const ObservabilityPage = memo(() => {\n return (\n <div className=\"grid grid-rows-[auto_1fr] h-full\">\n <SearchBar />\n\n <div className=\"grid grid-cols-[300px_1fr] overflow-hidden\">\n <div className=\"w-[300px] border-r border-border overflow-auto h-full\" data-testid=\"traces-container\">\n <TracesGroups />\n </div>\n\n <div className=\"overflow-auto\" data-testid=\"trace-details\">\n <TraceTimeline />\n <TraceEmptyState />\n </div>\n </div>\n </div>\n )\n})\nObservabilityPage.displayName = 'ObservabilityPage'\n","import { GanttChartSquare } from 'lucide-react'\nimport { memo } from 'react'\n\nexport const ObservabilityTabLabel = memo(() => (\n <div data-testid=\"observability-link\">\n <GanttChartSquare aria-hidden=\"true\" />\n <span>Tracing</span>\n </div>\n))\nObservabilityTabLabel.displayName = 'ObservabilityTabLabel'\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","names":["ApiResponse","MotiaPluginContext","api","tracerFactory","registerApi","method","path","Promise","clear","status","body","message","error","Error","MotiaPlugin","MotiaPluginContext","api","plugin","motia","workbench","packageName","cssImports","label","position","componentName","labelIcon"],"sources":["../src/api.ts","../src/plugin.ts"],"sourcesContent":["import type { ApiResponse, MotiaPluginContext } from '@motiadev/core'\n\nexport const api = ({ tracerFactory, registerApi }: MotiaPluginContext): void => {\n // POST /__motia/trace/clear - Clear all traces\n registerApi(\n {\n method: 'POST',\n path: '/__motia/trace/clear',\n },\n async (): Promise<ApiResponse> => {\n try {\n await tracerFactory.clear()\n return {\n status: 200,\n body: { message: 'Traces cleared' },\n }\n } catch (error: unknown) {\n return {\n status: 500,\n body: { error: error instanceof Error ? error.message : 'Unknown error' },\n }\n }\n },\n )\n}\n","import type { MotiaPlugin, MotiaPluginContext } from '@motiadev/core'\nimport { api } from './api'\n\nexport default function plugin(motia: MotiaPluginContext): MotiaPlugin {\n api(motia)\n\n return {\n workbench: [\n {\n packageName: '@motiadev/plugin-observability',\n cssImports: ['@motiadev/plugin-observability/dist/index.css'],\n label: 'Tracing',\n position: 'bottom',\n componentName: 'ObservabilityPage',\n labelIcon: 'gantt-chart',\n },\n ],\n }\n}\n"],"mappings":";AAEA,MAAaE,OAAO,EAAEC,eAAeC,kBAA4C;AAE/EA,aACE;EACEC,QAAQ;EACRC,MAAM;EACP,EACD,YAAkC;AAChC,MAAI;AACF,SAAMH,cAAcK,OAAO;AAC3B,UAAO;IACLC,QAAQ;IACRC,MAAM,EAAEC,SAAS,kBAAiB;IACnC;WACMC,OAAgB;AACvB,UAAO;IACLH,QAAQ;IACRC,MAAM,EAAEE,OAAOA,iBAAiBC,QAAQD,MAAMD,UAAU,iBAAgB;IACzE;;GAGN;;;;;ACpBH,SAAwBM,OAAOC,OAAwC;AACrEF,KAAIE,MAAM;AAEV,QAAO,EACLC,WAAW,CACT;EACEC,aAAa;EACbC,YAAY,CAAC,gDAAgD;EAC7DC,OAAO;EACPC,UAAU;EACVC,eAAe;EACfC,WAAW;EACZ,CAAA,EAEJ"}
1
+ {"version":3,"file":"plugin.js","names":["error: unknown"],"sources":["../src/api.ts","../src/plugin.ts"],"sourcesContent":["import type { ApiResponse, MotiaPluginContext } from '@motiadev/core'\n\nexport const api = ({ tracerFactory, registerApi }: MotiaPluginContext): void => {\n // POST /__motia/trace/clear - Clear all traces\n registerApi(\n {\n method: 'POST',\n path: '/__motia/trace/clear',\n },\n async (): Promise<ApiResponse> => {\n try {\n await tracerFactory.clear()\n return {\n status: 200,\n body: { message: 'Traces cleared' },\n }\n } catch (error: unknown) {\n return {\n status: 500,\n body: { error: error instanceof Error ? error.message : 'Unknown error' },\n }\n }\n },\n )\n}\n","import type { MotiaPlugin, MotiaPluginContext } from '@motiadev/core'\nimport { api } from './api'\n\nexport default function plugin(motia: MotiaPluginContext): MotiaPlugin {\n api(motia)\n\n return {\n workbench: [\n {\n packageName: '@motiadev/plugin-observability',\n cssImports: ['@motiadev/plugin-observability/dist/index.css'],\n label: 'Tracing',\n position: 'bottom',\n componentName: 'ObservabilityPage',\n labelIcon: 'gantt-chart',\n },\n ],\n }\n}\n"],"mappings":";AAEA,MAAa,OAAO,EAAE,eAAe,kBAA4C;AAE/E,aACE;EACE,QAAQ;EACR,MAAM;EACP,EACD,YAAkC;AAChC,MAAI;AACF,SAAM,cAAc,OAAO;AAC3B,UAAO;IACL,QAAQ;IACR,MAAM,EAAE,SAAS,kBAAkB;IACpC;WACMA,OAAgB;AACvB,UAAO;IACL,QAAQ;IACR,MAAM,EAAE,OAAO,iBAAiB,QAAQ,MAAM,UAAU,iBAAiB;IAC1E;;GAGN;;;;;ACpBH,SAAwB,OAAO,OAAwC;AACrE,KAAI,MAAM;AAEV,QAAO,EACL,WAAW,CACT;EACE,aAAa;EACb,YAAY,CAAC,gDAAgD;EAC7D,OAAO;EACP,UAAU;EACV,eAAe;EACf,WAAW;EACZ,CACF,EACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@motiadev/plugin-observability",
3
- "version": "0.13.0-beta.162-158257",
3
+ "version": "0.13.0-beta.162-945354",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",
@@ -17,24 +17,22 @@
17
17
  "@radix-ui/react-popover": "^1.1.15",
18
18
  "date-fns": "^4.1.0",
19
19
  "lucide-react": "^0.554.0",
20
+ "react": "^19.2.0",
20
21
  "react18-json-view": "^0.2.9",
21
22
  "zustand": "^5.0.8"
22
23
  },
23
24
  "peerDependencies": {
24
- "@motiadev/core": "0.13.0-beta.162-158257",
25
- "@motiadev/stream-client-react": "0.13.0-beta.162-158257",
26
- "@motiadev/ui": "0.13.0-beta.162-158257"
25
+ "@motiadev/core": "0.13.0-beta.162-945354",
26
+ "@motiadev/ui": "0.13.0-beta.162-945354",
27
+ "@motiadev/stream-client-react": "0.13.0-beta.162-945354"
27
28
  },
28
29
  "devDependencies": {
29
30
  "@bosh-code/tsdown-plugin-inject-css": "^2.0.0",
30
31
  "@bosh-code/tsdown-plugin-tailwindcss": "^1.0.1",
31
- "@rollup/plugin-babel": "^6.1.0",
32
32
  "@tailwindcss/postcss": "^4.1.17",
33
33
  "@types/express": "^5.0.5",
34
34
  "@types/node": "^24.10.1",
35
35
  "@types/react": "^19.2.7",
36
- "babel-plugin-react-compiler": "^1.0.0",
37
- "react": "^19.2.0",
38
36
  "tailwindcss": "^4.1.17",
39
37
  "tw-animate-css": "^1.4.0",
40
38
  "tsdown": "^0.16.6",