This trace is unnamed
++ You can name your traces when creating them manually. This helps organize and identify your traces more easily. +
+ + Learn how to create named traces ā + ++ Early access to deploy features +
++ Deploy is currently in Alpha +
++ This feature is still in development and may have limited functionality or stability issues. + By joining the alpha program, you{"'"}ll get early access to new features and help us improve the product. +
+{event.message}
+ )} ++ {currentJob.message || 'Deployment in progress'} +
++ {new Date(currentJob.queued_at).toLocaleString()} via GitHub +
++ {job.message || 'Deployment job'} +
++ {new Date(job.queued_at).toLocaleString()} via GitHub +
++ Manage environment variables and secrets for your deployment. These will be securely stored and made available to your application. +
+ + {/* Tab Navigation */} +{error}
++ {packConfigurations[fieldValues.pack_name as keyof typeof packConfigurations]?.description || 'Select an app type to see description'} +
++ {hostingDeployment ? JSON.stringify(hostingDeployment, null, 2) : 'No deployment data'} +
+ {/* Add configuration form or steps here */} ++ Once you delete a deployment, there is no going back. Please be certain. +
+Deploy your agent easily with AgentOps.
+Error loading projects: {projectsError.message}
+ )} + {orgsError && ( +Error loading organizations: {orgsError.message}
+ )} + + {/* Main content */} + {!projectsError && ( ++ {currentProjectCount} projects +
+Traces: {project.trace_count}
+Traces: {project.trace_count}
+Traces: {project.trace_count}
+Traces: {project.trace_count}
+
+ {displayKey}
+
+ + {description} +
++ Explore example notebooks from the AgentOps repository and get started quickly +
++ {currentExamples.length} examples available +
++ Framework: {selectedExample.framework} +
++ {point} +
+ ))} ++ Select an example to get started +
++ Want to integrate with your existing codebase instead? +
+ ++ Add AgentOps to your current project in minutes +
++ Build a new agent with our pre-built templates +
++ {plan.description} +
++ Run your agent and verify the installation was successful: +
+ + + {verificationAttempts > 0 && hasEvents && ( +
+
+ No events received. Please check: +
+ The AgentOps MCP Server is currently in beta. We'd love to hear your feedback!{' '} + + Share your thoughts here + +
++ Choose your IDE or tool to get started with the AgentOps MCP server. +
+ ++ Add the AgentOps MCP server to Cursor with one click. +
++ Add to your Claude Desktop configuration file. +
+ +macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
+ For VSCode, Windsurf, and Zed, manually add the following configuration: +
+ +VSCode: Edit ~/.vscode/mcp.json in your project root
Windsurf: Edit ~/.codeium/windsurf/mcp_config.json (global only)
Zed: Edit settings.json (open via cmd+, or zed: open settings)
+ To install automatically for Claude Desktop via Smithery, run this command. +
+auth
+ Authorize using an AgentOps project API key. The server will automatically prompt for this when needed.
+api_key (string)get_project
+ Get details about the current project.
+get_trace
+ Get trace information by ID.
+trace_id (string)get_span
+ Get span information by ID.
+span_id (string)get_complete_trace
+ Get complete trace information by ID.
+trace_id (string)+ Organization: {orgName} +
++ {(project.trace_count ?? 0).toLocaleString()}{' '} + {project.trace_count === 1 ? 'Trace' : 'Traces'} +
+ + {!hasTraces && !isOverLimit && ( ++ {currentProjectCount} projects +
+ ) : ( + typeof maxAllowedProjects === 'number' && ( ++ {currentProjectCount} / {maxAllowedProjects} projects used +
+ {isAtLimit && ( ++ Watch this quick tutorial to learn how to integrate AgentOps into your project +
++ Error loading user data: {error.message}. Please try refreshing. +
+ ); + } + + if (!user) { + return 'Could not load user data. You might not be properly authenticated.'; + } + + return+ Update your account settings. Set your preferred language and timezone. +
++ Estimate your monthly costs based on expected usage +
++ {formatLargePrice(costs.total)} +
++ per month for your estimated usage +
+When this user accepts the invite, you will be charged:
+When this user accepts the invite, you will be charged:
++ Are you sure you want to remove {memberToRemove?.email} from + this organization? They will lose access immediately. +
+ {isLicensed && pricePerSeat && ( +Billing Impact:
+{title}
+{formatPrice(value)}
++ {item} +
+ ))} ++ You are a member of {org?.name}. +
+ {ownersAndAdmins.length > 0 && ( ++ If you need organization changes, please contact your owner or admin: +
+Unable to load billing data
++ Your subscription is being activated. +
++ Your current subscription will end on{' '} + {legacyEndDate}. To continue using Pro + features, upgrade to our new per-seat billing plan. +
++ Seamless transition to our improved per-seat + usage billing model +
+{promoError}
+ )} ++ Unlock unlimited features and premium support +
+{promoError}
+ )} ++ {Math.max(1, org?.paid_member_count || 1)} licensed{' '} + {Math.max(1, org?.paid_member_count || 1) === 1 ? 'member' : 'members'} +
++ ${(allPricing?.seat?.amount || 4000) / 100} per seat per{' '} + {allPricing?.seat?.interval || 'month'} +
++ Contact{' '} + + alex@agentops.ai + {' '} + to manage this subscription. +
+No billing data for current period
+Base (Seats)
+$0.00
+0 licensed members
++ $ + {allPricing?.seat?.amount + ? (allPricing.seat.amount / 100).toFixed(2) + : '40.00'}{' '} + per seat per {allPricing?.seat?.interval || 'month'} +
+API Tokens
++ $0.00 +
+0 tokens
++ {formatPrice(tokenPricePerMillion, { + decimals: 2, + })}{' '} + per 1M tokens +
+Span Uploads
++ $0.00 +
+0 spans
++ {formatPrice(spanPricePerThousand, { + decimals: 2, + })}{' '} + per 1K spans +
++ Upgrade to Pro to manage team members and seat licenses +
+ +{plan.description}
+Unable to load project cost data
+No usage data for this period
++ Costs calculated using the same billing data as the dashboard above. +
++ Unlock unlimited features and premium support +
++ Usage-based billing for tokens and spans. Only pay for what you use. +
+{promoError}
+ )} ++ Discount applied: {billing.validatedDiscountCode} +
++ {billing.validatedDiscountDescription} +
++ {org.subscription_start_date && org.subscription_end_date + ? `${new Date(org.subscription_start_date * 1000).toLocaleDateString()} - ${new Date(org.subscription_end_date * 1000).toLocaleDateString()}` + : org.subscription_end_date + ? `Next billing: ${new Date(org.subscription_end_date * 1000).toLocaleDateString()}` + : 'Active subscription'} +
+ )} ++ Period: {new Date(_billingData.current_period.period_start).toLocaleDateString()} -{' '} + {new Date(_billingData.current_period.period_end).toLocaleDateString()} +
++ This subscription is on our legacy billing model and cannot be managed here. It will + automatically end on{' '} + + {_billingData.legacy_cancellation_date + ? new Date(_billingData.legacy_cancellation_date).toLocaleDateString('en-US', { + year: 'numeric', + month: 'long', + day: 'numeric', + }) + : 'Unknown'} + + . +
++ {org.paid_member_count || 0} licensed{' '} + {org.paid_member_count === 1 ? 'member' : 'members'} +
++ Manage licenses in your organization settings +
++ Contact{' '} + + alex@agentops.ai + {' '} + to manage this subscription. +
++ Legacy subscriptions cannot be managed here. Your subscription will automatically end + on the date shown above. +
+Processing invitation...
++ Error loading billing data: {loadingState.error?.message || 'Unknown error'} +
++ No organizations found. Create an organization to manage billing. +
++ We have updated our billing to include seat-based, and usage based billing. We + automatically cancelled your existing subscriptions. You can re-subscribe to set + up a new subscription. Charges will be added at the end of the first month of + your new subscription. +
+Project limit reached
+{createProjectDisabledReason}
++ Manage projects and their API keys for each organization. +
+No organizations found.
+| + Name + | ++ Created At + | ++ Actions + | +
|---|---|---|
| + {ttd.branch_name} + | ++ {ttd.created_at ? new Date(ttd.created_at).toLocaleString() : 'N/A'} + | +
+
+
+
+ |
+
+ Model: + + {getIconForModel(agent.model)} + {agent.model} + +
+ )} + {/* Common fields across agent types */} + {agent.input &&+ Reasoning: {String(agent.reasoning)} +
+ )} + {agent.markdown !== undefined && ( ++ Markdown: {String(agent.markdown)} +
+ )} + {agent.showToolCalls !== undefined && ( ++ Show Tool Calls: {String(agent.showToolCalls)} +
+ )} +
+ {JSON.stringify(tool, null, 2)}
+
+ + {content} +
++ {agent.description} +
+ )} + {agent?.model && ( ++ Model: {agent.model} +
+ )} + {agent?.instruction && ( +Instructions:
+
+ {agent.instruction}
+
+ Tool:
++ {tool.name} - {tool.description} +
+Nested Subagents:
++ ADK agent data not found or incomplete in the expected structure. +
++ {agent.description} +
+ )} + + {agent?.instruction && ( +
+ {agent.instruction}
+
+ Tool: {tool.name}
++ {tool.description} +
++ Nested Workflow Steps: +
++ ADK workflow data not found or incomplete. +
++ No AG2 agent data available. +
++ No Agno agent data available. +
++ Role: {member.role} +
+ )} + {member.model && ( ++ Agno workflow data not found or incomplete. +
++ No {agentType} data available. +
+This trace is unnamed
++ You can name your traces when creating them manually. This helps organize and identify your traces more easily. +
+ + Learn how to create named traces ā + ++ {outputData} +
+ ); +}; + +export const CollapsibleSection = ({ + title, + defaultExpanded = true, + icon, + children, +}: CollapsibleSectionProps) => { + const [isExpanded, setIsExpanded] = useState(defaultExpanded); + + return ( ++ No CrewAI agent data available. +
++ No CrewAI task data available. +
++ Goal: {agent.goal} +
+ )} + + {agent?.backstory && ( +
+ {agent.backstory}
+
+ + Task: {task.name || 'Unnamed Task'} +
+ {task.description && ( ++ {task.description} +
+ )} + {task.expected_output && ( ++ Expected Output: {task.expected_output} +
+ )} +Tools:
++ Nested Workflow Steps: +
+CrewAI workflow data not found or incomplete. Showing raw data:
++ Goal: {agent.goal} +
+ )} + + {agent?.backstory && ( +
+ {agent.backstory}
+
+ + Task: {task.summary || 'Task Details'} +
++ {task.description} +
++ Expected Output: {task.expected_output} +
+ )} + {task.raw && ( +
+ {task.raw}
+
+ + Tools ({tools.length}) +
++ {tool.name || 'Unknown Tool'} +
++ Arguments: +
+
+
+ {toolArguments}
+
+
+ + Description: +
++ {toolDescription} +
++ {tool.description} +
+ )} +Error rendering CrewAI workflow visualization:
+{error instanceof Error ? error.message : String(error)}
+Showing raw span attributes for debugging:
+
+ {code}
+
+ );
+};
+
+export const UnifiedToolSpanViewer = ({ toolSpan }: { toolSpan: ISpan }) => {
+ const toolData = extractUnifiedToolData(toolSpan);
+
+ return (
+ No tool data available
+It looks like AgentOps may not be fully instrumented
++ You're only seeing a single session span, which typically means AgentOps isn't properly tracking your LLM calls, tools, and agents. + This limits visibility into your application's behavior. +
+{modelName}
+Waterfall view limited
++ Showing first {spanWaterfallLimit} of {spans.length} spans.{' '} + + Upgrade to see all spans + +
+Span ID
++ {span?.span_id} +
+System
++ {getIconForModel(genAi?.system || '') ? ( + {getIconForModel(genAi?.system || '')} + ) : null} + {genAi?.system || 'N/A'} +
+Duration
+{formatDuration(`${span?.duration || '0'}`)}
+API Base
++ {genAi?.openai?.api_base || 'N/A'} +
+Response ID
++ {genAi?.response?.[0]?.id || 'N/A'} +
+Response Model
++ {checkResponseModel(genAi?.response)} +
+Prompt
+Completion
+Total
++ {isError && failureCount > 0 + ? `Sorry, we couldn't find the trace after ${failureCount} attempts. It might still be processing or there was an issue.` + : fetchError?.message || 'An unknown error occurred'} +
+Unable to calculate cost
++ This might be because you're using an unrecognized model. +
+Loading trace details...
+Still looking for the trace... Attempt {failureCount} of 5.
++ This trace is older than your plan's data retention limit. Upgrade to Pro + to access historical trace data without restrictions. +
+ + +Unable to load logs for this trace.
+{error}
+No logs were found for this trace.
+No logs were found for this trace.
++ You've reached the end of your available logs +
+ + + ++ You've reached the end of your available logs +
+ + + +Unable to calculate cost
++ This might be because you're using an unrecognized model +
+This trace is unnamed
++ You can name your traces when creating them manually. This helps organize + and identify your traces more easily. +
+ + Learn how to create named traces ā + +Limited instrumentation detected
++ This trace contains only a single session span. AgentOps may not be + properly tracking your LLM calls, tools, and agents. +
+ + SDK Setup Guide ā + +{boldMatch(traceId, searchTerm)}
+ {description}
+ )} + {benefit &&{benefit}
} +{description}
+ )} + + {benefit && ( +{message}
+ {error &&Error: {error}
} +STAF, INC PRIVACY POLICY
++ STAF, INC (the āCompanyā) is committed to maintaining robust privacy protections for its + users. Our Privacy Policy (āPrivacy Policyā) is designed to help you understand how we + collect, use and safeguard the information you provide to us and to assist you in making + informed decisions when using our Service. +
++ For purposes of this Agreement, āSiteā refers to the Companyās website, which can be + accessed at www.agentops.ai and www.staf.ai. +
++ Serviceā refers to the Companyās services accessed via the Site, in which users can view + agents, test their agents, debug their agents, fix their agents, bring their agents to + market, and sell their agents on an affiliate basis. +
+The terms āwe,ā āus,ā and āourā refer to the Company.
+āYouā refers to you, as a user of our Site or our Service.
++ By accessing our Site or our Service, you accept our Privacy Policy and{' '} + + Terms of Use + + , and you consent to our collection, storage, use and disclosure of your Personal + Information as described in this Privacy Policy. +
++ We collect āNon-Personal Informationā and āPersonal Information.ā Non-Personal Information + includes information that cannot be used to personally identify you, such as anonymous usage + data, general demographic information we may collect, referring/exit pages and URLs, + platform types, preferences you submit and preferences that are generated based on the data + you submit and number of clicks. Personal Information includes your email, information from + sign in provider, phone number, and any information required to make a purchase which you + submit to us through the registration process at the Site. +
++ To activate the Service you do not need to submit any Personal Information other than your + email address. To use the Service thereafter, you do need to submit further Personal + Information, which may include any information that is used to sign up for an account or + make a payment. However, in an effort to improve the quality of the Service, we track + information provided to us by your browser or by our software application when you view or + use the Service, such as the website you came from (known as the āreferring URLā), the type + of browser you use, the device from which you connected to the Service, the time and date of + access, and other information that does not personally identify you. We track this + information using cookies, or small text files which include an anonymous unique identifier. + Cookies are sent to a userās browser from our servers and are stored on the userās computer + hard drive. Sending a cookie to a userās browser enables us to collect Non-Personal + information about that user and keep a record of the userās preferences when utilizing our + services, both on an individual and aggregate basis. For example, the Company may use + cookies to collect the following information: clicks, preferences, device specifications, + location, and search history. +
++ The Company may use both persistent and session cookies; persistent cookies remain on your + computer after you close your session and until you delete them, while session cookies + expire when you close your browser. +
++ In addition to the information provided automatically by your browser when you visit the + Site, to become a subscriber to the Service you will need to create a personal profile. You + can create a profile by registering with the Service and entering your email address, and + creating a user name and a password. By registering, you are authorizing us to collect, + store and use your email address in accordance with this Privacy Policy. +
++ The Site and the Service are not directed to anyone under the age of 13. The Site does not + knowingly collect or solicit information from anyone under the age of 13, or allow anyone + under the age of 13 to sign up for the Service. In the event that we learn that we have + gathered personal information from anyone under the age of 13 without the consent of a + parent or guardian, we will delete that information as soon as possible. If you believe we + have collected such information, please contact us at alex@agentops.ai. +
++ Except as otherwise stated in this Privacy Policy, we do not sell, trade, rent or otherwise + share for marketing purposes your Personal Information with third parties without your + consent. We do share Personal Information with vendors who are performing services for the + Company, such as the servers for our email communications who are provided access to userās + email address for purposes of sending emails from us. Those vendors use your Personal + Information only at our direction and in accordance with our Privacy Policy. +
++ In general, the Personal Information you provide to us is used to help us communicate with + you. For example, we use Personal Information to contact users in response to questions, + solicit feedback from users, provide technical support, and inform users about promotional + offers. +
++ We may share Personal Information with outside parties if we have a good-faith belief that + access, use, preservation or disclosure of the information is reasonably necessary to meet + any applicable legal process or enforceable governmental request; to enforce applicable + Terms of Service, including investigation of potential violations; address fraud, security + or technical concerns; or to protect against harm to the rights, property, or safety of our + users or the public as required or permitted by law. +
++ In general, we use Non-Personal Information to help us improve the Service and customize the + user experience. We also aggregate Non-Personal Information in order to track trends and + analyze use patterns on the Site. This Privacy Policy does not limit in any way our use or + disclosure of Non-Personal Information and we reserve the right to use and disclose such + Non-Personal Information to our partners, advertisers and other third parties at our + discretion. +
++ In the event we undergo a business transaction such as a merger, acquisition by another + company, or sale of all or a portion of our assets, your Personal Information may be among + the assets transferred. You acknowledge and consent that such transfers may occur and are + permitted by this Privacy Policy, and that any acquirer of our assets may continue to + process your Personal Information as set forth in this Privacy Policy. If our information + practices change at any time in the future, we will post the policy changes to the Site so + that you may opt out of the new information practices. We suggest that you check the Site + periodically if you are concerned about how your information is used. +
++ We implement security measures designed to protect your information from unauthorized + access. Your account is protected by your account password and we urge you to take steps to + keep your personal information safe by not disclosing your password and by logging out of + your account after each use. We further protect your information from potential security + breaches by implementing certain technological security measures including encryption, + firewalls and secure socket layer technology. However, these measures do not guarantee that + your information will not be accessed, disclosed, altered or destroyed by breach of such + firewalls and secure server software. By using our Service, you acknowledge that you + understand and agree to assume these risks. +
++ You have the right at any time to prevent us from contacting you for marketing purposes. + When we send a promotional communication to a user, the user can opt out of further + promotional communications by following the unsubscribe instructions provided in each + promotional e-mail. You can also indicate that you do not wish to receive marketing + communications from us by emailing alex@agentops.ai of the Site. Please note that + notwithstanding the promotional preferences you indicate by either unsubscribing or opting + out at alex@agentops.ai, we may continue to send you administrative emails including, for + example, periodic updates to our Privacy Policy. +
++ As part of the Service, we may provide links to or compatibility with other websites or + applications. However, we are not responsible for the privacy practices employed by those + websites or the information or content they contain. This Privacy Policy applies solely to + information collected by us through the Site and the Service. Therefore, this Privacy Policy + does not apply to your use of a third party website accessed by selecting a link on our Site + or via our Service. To the extent that you access or use the Service through or on another + website or application, then the privacy policy of that other website or application will + apply to your access or use of that site or application. We encourage our users to read the + privacy statements of other websites before proceeding to use them. +
++ The Company reserves the right to change this policy and our Terms of Service at any time. + We will notify you of significant changes to our Privacy Policy by sending a notice to the + primary email address specified in your account or by placing a prominent notice on our + site. Significant changes will go into effect 30 days following such notification. + Non-material changes or clarifications will take effect immediately. You should periodically + check the Site and this privacy page for updates. +
++ Google User Data The Service collects and uses Google User Data solely for the purpose of + facilitating the function of servicing the Userās account. This data is used to provide the + Serviceās advertised functionality and enhance the user experience. OAuth Keys Upon + successfully signing into a Google User account, the Service may securely retain OAuth keys + to access and manage the Userās account for the sole purpose of providing the Serviceās + advertised functionality. These OAuth keys are stored in a secure database and are not + shared with third parties. Third Party Partners The Service may use third party partners to + provide additional functionality. These partners may have access to Google User Data for the + sole purpose of providing the Serviceās advertised functionality. Third party partners will + only have access to the minimum amount of data required to provide the Serviceās advertised + functionality. AI Models Google data may be used in AI models both locally and hosted by + third party partners. These models may utilize Google Data to extend training sets and + become more capable over time. These models may be used to provide additional functionality + to the Serviceās advertised functionality. These models are used to provide improvements to + the Serviceās advertised functionality. +
++ If you have any questions regarding this Privacy Policy or the practices of this Site, + please contact us by sending an email to alex@agentops.ai. +
++ Last Updated: This Privacy Policy was last updated on July 10, 2024. +
++ NOTE: In the Playground, session data will be lost as soon as you log out. +
+ ++ {'Remember your password? '}{' '} + +
++ By creating an account, you acknowledge and agree to our{' '} + + Terms of Service + {' '} + and{' '} + + Privacy Policy + + . +
+ ); +} + +const LastUsedText = ({ type, isSignUp }: { type: LastUsedType; isSignUp: boolean }) => { + const [lastUsed, setLastUsed] = useStateCheck your email for the confirmation link
++ {'Want to use another authentication method? '} + +
++ {'Want to use another authentication method? '}{' '} + +
++ {'Already have an account? '}{' '} + +
++ Status: {authStatus} +
+ {!isSignedIn ? ( ++ Status: {status} +
+
+ {JSON.stringify(data, null, 2)}
+
+