<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AgentScript Report</title>
<script src="https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.min.js"></script>
<style>
*, *::before, *::after { box-sizing: border-box; }
body { margin: 0; background: #0d1117; color: #c9d1d9; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; display: flex; min-height: 100vh; }
#sidebar { width: 240px; min-height: 100vh; background: #161b22; border-right: 1px solid #30363d; position: fixed; top: 0; left: 0; bottom: 0; overflow-y: auto; display: flex; flex-direction: column; }
.sidebar-header { padding: 20px 16px 16px; border-bottom: 1px solid #30363d; }
.sidebar-title { font-size: 0.75rem; font-weight: 600; color: #8b949e; text-transform: uppercase; letter-spacing: 0.05em; }
.sidebar-count { font-size: 0.7rem; color: #484f58; margin-top: 2px; }
.nav-item { padding: 8px 16px; cursor: pointer; color: #c9d1d9; font-size: 0.875rem; border-left: 3px solid transparent; display: flex; align-items: center; gap: 8px; transition: background 0.1s; }
.nav-item:hover { background: #21262d; }
.nav-item.active { color: #58a6ff; border-left-color: #58a6ff; background: rgba(88,166,255,0.05); }
.nav-name { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.badge { font-size: 0.65rem; color: #484f58; background: #21262d; border-radius: 10px; padding: 1px 6px; flex-shrink: 0; }
.nav-item.active .badge { background: rgba(88,166,255,0.15); color: #58a6ff; }
#main { margin-left: 240px; padding: 32px; flex: 1; min-width: 0; }
.agent-section { display: none; }
.agent-section.active { display: block; }
.agent-header { margin-bottom: 20px; }
.agent-name { font-size: 1.4rem; color: #58a6ff; margin: 0 0 2px 0; font-weight: 600; }
.agent-label { font-size: 0.85rem; color: #8b949e; margin-bottom: 2px; }
.agent-file { font-size: 0.75rem; color: #484f58; font-family: monospace; }
.graph-container { background: #161b22; border-radius: 8px; padding: 24px; border: 1px solid #30363d; overflow: auto; cursor: pointer; }
.stats-bar { margin-top: 10px; font-size: 0.8rem; color: #8b949e; background: #161b22; border-radius: 6px; padding: 9px 16px; border: 1px solid #30363d; display: flex; gap: 20px; flex-wrap: wrap; }
.stats-bar strong { color: #c9d1d9; }
.legend { margin-top: 8px; font-size: 0.72rem; color: #484f58; }
.mermaid svg { max-width: 100%; height: auto; }
/* Detail panel */
.detail-panel { margin-top: 24px; }
.detail-card { background: #161b22; border: 1px solid #30363d; border-radius: 8px; padding: 20px; }
.detail-card + .detail-card { margin-top: 16px; }
.detail-back { font-size: 0.78rem; color: #58a6ff; cursor: pointer; margin-bottom: 14px; display: inline-flex; align-items: center; gap: 4px; }
.detail-back:hover { text-decoration: underline; }
.detail-title { font-size: 1rem; font-weight: 600; color: #c9d1d9; margin: 0 0 4px 0; display: flex; align-items: center; gap: 8px; }
.detail-desc { font-size: 0.82rem; color: #8b949e; margin: 0 0 16px 0; }
.entry-badge { font-size: 0.65rem; background: rgba(88,166,255,0.15); color: #58a6ff; border: 1px solid rgba(88,166,255,0.3); border-radius: 10px; padding: 1px 7px; font-weight: 500; }
.detail-section { margin-bottom: 14px; }
.detail-section-title { font-size: 0.7rem; font-weight: 600; color: #8b949e; text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: 6px; }
.tag-list { display: flex; flex-wrap: wrap; gap: 6px; }
.tag { font-size: 0.78rem; padding: 2px 10px; border-radius: 12px; font-family: monospace; }
.tag-action { background: rgba(188,135,255,0.12); color: #c8a4ff; border: 1px solid rgba(188,135,255,0.25); }
.tag-topic { background: rgba(88,166,255,0.1); color: #79b8ff; border: 1px solid rgba(88,166,255,0.2); }
.tag-var-read { background: rgba(57,211,83,0.1); color: #7ee787; border: 1px solid rgba(57,211,83,0.2); }
.tag-var-write { background: rgba(255,166,77,0.1); color: #ffb347; border: 1px solid rgba(255,166,77,0.2); }
.tag-delegate { background: rgba(88,118,255,0.1); color: #7080ff; border: 1px solid rgba(88,118,255,0.2); }
.var-table { width: 100%; border-collapse: collapse; font-size: 0.82rem; }
.var-table th { color: #8b949e; font-weight: 500; text-align: left; padding: 4px 8px 8px 0; font-size: 0.7rem; text-transform: uppercase; letter-spacing: 0.04em; }
.var-table td { padding: 4px 8px 4px 0; color: #c9d1d9; border-top: 1px solid #21262d; font-family: monospace; }
.var-type { color: #7ee787; }
.var-mod { font-size: 0.7rem; color: #8b949e; }
.empty-msg { font-size: 0.8rem; color: #484f58; font-style: italic; }
.overview-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
@media (max-width: 700px) { .overview-grid { grid-template-columns: 1fr; } }
</style>
</head>
<body>
<nav id="sidebar">
<div class="sidebar-header">
<div class="sidebar-title">AgentScript</div>
<div class="sidebar-count">10 agents</div>
</div>
<div class="nav-item" id="nav-ComplexStateManagement" data-id="ComplexStateManagement" onclick="showAgent('ComplexStateManagement')">
<span class="nav-name">ComplexStateManagement</span>
<span class="badge">1T</span>
</div>
<div class="nav-item" id="nav-ConditionalLogicPatterns" data-id="ConditionalLogicPatterns" onclick="showAgent('ConditionalLogicPatterns')">
<span class="nav-name">ConditionalLogicPatterns</span>
<span class="badge">1T</span>
</div>
<div class="nav-item" id="nav-ContextHandling" data-id="ContextHandling" onclick="showAgent('ContextHandling')">
<span class="nav-name">ContextHandling</span>
<span class="badge">1T</span>
</div>
<div class="nav-item" id="nav-CustomerServiceAgent" data-id="CustomerServiceAgent" onclick="showAgent('CustomerServiceAgent')">
<span class="nav-name">CustomerService_Agent</span>
<span class="badge">5T</span>
</div>
<div class="nav-item" id="nav-DynamicActionRouting" data-id="DynamicActionRouting" onclick="showAgent('DynamicActionRouting')">
<span class="nav-name">DynamicActionRouting</span>
<span class="badge">1T</span>
</div>
<div class="nav-item" id="nav-EscalationPatterns" data-id="EscalationPatterns" onclick="showAgent('EscalationPatterns')">
<span class="nav-name">EscalationPatterns</span>
<span class="badge">1T</span>
</div>
<div class="nav-item" id="nav-InstructionActionReferences" data-id="InstructionActionReferences" onclick="showAgent('InstructionActionReferences')">
<span class="nav-name">InstructionActionReferences</span>
<span class="badge">1T</span>
</div>
<div class="nav-item" id="nav-MultiTopicOrchestration" data-id="MultiTopicOrchestration" onclick="showAgent('MultiTopicOrchestration')">
<span class="nav-name">MultiTopicOrchestration</span>
<span class="badge">4T</span>
</div>
<div class="nav-item" id="nav-SafetyAndGuardrails" data-id="SafetyAndGuardrails" onclick="showAgent('SafetyAndGuardrails')">
<span class="nav-name">SafetyAndGuardrails</span>
<span class="badge">1T</span>
</div>
<div class="nav-item" id="nav-TopicDelegation" data-id="TopicDelegation" onclick="showAgent('TopicDelegation')">
<span class="nav-name">TopicDelegation</span>
<span class="badge">2T</span>
</div>
</nav>
<main id="main">
<div class="agent-section" id="section-ComplexStateManagement">
<div class="agent-header">
<h1 class="agent-name">ComplexStateManagement</h1>
<div class="agent-label">ComplexStateManagement</div>
<div class="agent-file">../agent-script-recipes/force-app/future_recipes/complexStateManagement/aiAuthoringBundles/ComplexStateManagement/ComplexStateManagement.agent</div>
</div>
<div class="graph-container">
<div class="mermaid">flowchart LR
start_agent([start_agent])
task_management[task_management]
start_agent --> task_management
click start_agent onNodeClick
click task_management onNodeClick</div>
</div>
<div class="stats-bar">
<span><strong>1</strong> topics</span>
<span><strong>5</strong> variables</span>
<span><strong>2</strong> action defs</span>
<span><strong>3</strong> reasoning steps</span>
</div>
<div class="legend">→ transition | ⇒ delegate | ([name]) = entry point | <em>click a node for details</em></div>
<div class="detail-panel" id="detail-ComplexStateManagement"></div>
</div>
<div class="agent-section" id="section-ConditionalLogicPatterns">
<div class="agent-header">
<h1 class="agent-name">ConditionalLogicPatterns</h1>
<div class="agent-label">ConditionalLogicPatterns</div>
<div class="agent-file">../agent-script-recipes/force-app/future_recipes/conditionalLogicPatterns/aiAuthoringBundles/ConditionalLogicPatterns/ConditionalLogicPatterns.agent</div>
</div>
<div class="graph-container">
<div class="mermaid">flowchart LR
start_agent([start_agent])
loan_evaluation[loan_evaluation]
start_agent --> loan_evaluation
click start_agent onNodeClick
click loan_evaluation onNodeClick</div>
</div>
<div class="stats-bar">
<span><strong>1</strong> topics</span>
<span><strong>8</strong> variables</span>
<span><strong>1</strong> action defs</span>
<span><strong>2</strong> reasoning steps</span>
</div>
<div class="legend">→ transition | ⇒ delegate | ([name]) = entry point | <em>click a node for details</em></div>
<div class="detail-panel" id="detail-ConditionalLogicPatterns"></div>
</div>
<div class="agent-section" id="section-ContextHandling">
<div class="agent-header">
<h1 class="agent-name">ContextHandling</h1>
<div class="agent-label">ContextHandling</div>
<div class="agent-file">../agent-script-recipes/force-app/future_recipes/contextHandling/aiAuthoringBundles/ContextHandling/ContextHandling.agent</div>
</div>
<div class="graph-container">
<div class="mermaid">flowchart LR
start_agent([start_agent])
personalized_service[personalized_service]
start_agent --> personalized_service
click start_agent onNodeClick
click personalized_service onNodeClick</div>
</div>
<div class="stats-bar">
<span><strong>1</strong> topics</span>
<span><strong>7</strong> variables</span>
<span><strong>2</strong> action defs</span>
<span><strong>2</strong> reasoning steps</span>
</div>
<div class="legend">→ transition | ⇒ delegate | ([name]) = entry point | <em>click a node for details</em></div>
<div class="detail-panel" id="detail-ContextHandling"></div>
</div>
<div class="agent-section" id="section-CustomerServiceAgent">
<div class="agent-header">
<h1 class="agent-name">CustomerService_Agent</h1>
<div class="agent-label">Customer Service Agent</div>
<div class="agent-file">../agent-script-recipes/force-app/future_recipes/customerServiceAgent/aiAuthoringBundles/CustomerServiceAgent/CustomerServiceAgent.agent</div>
</div>
<div class="graph-container">
<div class="mermaid">flowchart LR
start_agent([start_agent])
closure[closure]
triage[triage]
solution_presentation[solution_presentation]
resolution[resolution]
escalation[escalation]
start_agent --> triage
closure --> triage
solution_presentation --> escalation
resolution --> solution_presentation
resolution --> escalation
click start_agent onNodeClick
click closure onNodeClick
click triage onNodeClick
click solution_presentation onNodeClick
click resolution onNodeClick
click escalation onNodeClick</div>
</div>
<div class="stats-bar">
<span><strong>5</strong> topics</span>
<span><strong>16</strong> variables</span>
<span><strong>14</strong> action defs</span>
<span><strong>10</strong> reasoning steps</span>
</div>
<div class="legend">→ transition | ⇒ delegate | ([name]) = entry point | <em>click a node for details</em></div>
<div class="detail-panel" id="detail-CustomerServiceAgent"></div>
</div>
<div class="agent-section" id="section-DynamicActionRouting">
<div class="agent-header">
<h1 class="agent-name">DynamicActionRouting</h1>
<div class="agent-label">DynamicActionRouting</div>
<div class="agent-file">../agent-script-recipes/force-app/future_recipes/dynamicActionRouting/aiAuthoringBundles/DynamicActionRouting/DynamicActionRouting.agent</div>
</div>
<div class="graph-container">
<div class="mermaid">flowchart LR
start_agent([start_agent])
ticket_management[ticket_management]
start_agent --> ticket_management
click start_agent onNodeClick
click ticket_management onNodeClick</div>
</div>
<div class="stats-bar">
<span><strong>1</strong> topics</span>
<span><strong>7</strong> variables</span>
<span><strong>8</strong> action defs</span>
<span><strong>9</strong> reasoning steps</span>
</div>
<div class="legend">→ transition | ⇒ delegate | ([name]) = entry point | <em>click a node for details</em></div>
<div class="detail-panel" id="detail-DynamicActionRouting"></div>
</div>
<div class="agent-section" id="section-EscalationPatterns">
<div class="agent-header">
<h1 class="agent-name">EscalationPatterns</h1>
<div class="agent-label">EscalationPatterns</div>
<div class="agent-file">../agent-script-recipes/force-app/future_recipes/escalationPatterns/aiAuthoringBundles/EscalationPatterns/EscalationPatterns.agent</div>
</div>
<div class="graph-container">
<div class="mermaid">flowchart LR
start_agent([start_agent])
general_support[general_support]
start_agent --> general_support
click start_agent onNodeClick
click general_support onNodeClick</div>
</div>
<div class="stats-bar">
<span><strong>1</strong> topics</span>
<span><strong>2</strong> variables</span>
<span><strong>0</strong> action defs</span>
<span><strong>2</strong> reasoning steps</span>
</div>
<div class="legend">→ transition | ⇒ delegate | ([name]) = entry point | <em>click a node for details</em></div>
<div class="detail-panel" id="detail-EscalationPatterns"></div>
</div>
<div class="agent-section" id="section-InstructionActionReferences">
<div class="agent-header">
<h1 class="agent-name">InstructionActionReferences</h1>
<div class="agent-label">InstructionActionReferences</div>
<div class="agent-file">../agent-script-recipes/force-app/future_recipes/instructionActionReferences/aiAuthoringBundles/InstructionActionReferences/InstructionActionReferences.agent</div>
</div>
<div class="graph-container">
<div class="mermaid">flowchart LR
start_agent([start_agent])
case_management[case_management]
start_agent --> case_management
click start_agent onNodeClick
click case_management onNodeClick</div>
</div>
<div class="stats-bar">
<span><strong>1</strong> topics</span>
<span><strong>1</strong> variables</span>
<span><strong>1</strong> action defs</span>
<span><strong>2</strong> reasoning steps</span>
</div>
<div class="legend">→ transition | ⇒ delegate | ([name]) = entry point | <em>click a node for details</em></div>
<div class="detail-panel" id="detail-InstructionActionReferences"></div>
</div>
<div class="agent-section" id="section-MultiTopicOrchestration">
<div class="agent-header">
<h1 class="agent-name">MultiTopicOrchestration</h1>
<div class="agent-label">MultiTopicOrchestration</div>
<div class="agent-file">../agent-script-recipes/force-app/future_recipes/multiTopicOrchestration/aiAuthoringBundles/MultiTopicOrchestration/MultiTopicOrchestration.agent</div>
</div>
<div class="graph-container">
<div class="mermaid">flowchart LR
start_agent([start_agent])
car_booking[car_booking]
orchestrator[orchestrator]
hotel_booking[hotel_booking]
flight_booking[flight_booking]
start_agent --> orchestrator
orchestrator --> flight_booking
orchestrator --> hotel_booking
orchestrator --> car_booking
click start_agent onNodeClick
click car_booking onNodeClick
click orchestrator onNodeClick
click hotel_booking onNodeClick
click flight_booking onNodeClick</div>
</div>
<div class="stats-bar">
<span><strong>4</strong> topics</span>
<span><strong>18</strong> variables</span>
<span><strong>7</strong> action defs</span>
<span><strong>8</strong> reasoning steps</span>
</div>
<div class="legend">→ transition | ⇒ delegate | ([name]) = entry point | <em>click a node for details</em></div>
<div class="detail-panel" id="detail-MultiTopicOrchestration"></div>
</div>
<div class="agent-section" id="section-SafetyAndGuardrails">
<div class="agent-header">
<h1 class="agent-name">SafetyAndGuardrails</h1>
<div class="agent-label">SafetyAndGuardrails</div>
<div class="agent-file">../agent-script-recipes/force-app/future_recipes/safetyAndGuardrails/aiAuthoringBundles/SafetyAndGuardrails/SafetyAndGuardrails.agent</div>
</div>
<div class="graph-container">
<div class="mermaid">flowchart LR
start_agent([start_agent])
data_management[data_management]
start_agent --> data_management
click start_agent onNodeClick
click data_management onNodeClick</div>
</div>
<div class="stats-bar">
<span><strong>1</strong> topics</span>
<span><strong>6</strong> variables</span>
<span><strong>2</strong> action defs</span>
<span><strong>3</strong> reasoning steps</span>
</div>
<div class="legend">→ transition | ⇒ delegate | ([name]) = entry point | <em>click a node for details</em></div>
<div class="detail-panel" id="detail-SafetyAndGuardrails"></div>
</div>
<div class="agent-section" id="section-TopicDelegation">
<div class="agent-header">
<h1 class="agent-name">TopicDelegation</h1>
<div class="agent-label">TopicDelegation</div>
<div class="agent-file">../agent-script-recipes/force-app/future_recipes/topicDelegation/aiAuthoringBundles/TopicDelegation/TopicDelegation.agent</div>
</div>
<div class="graph-container">
<div class="mermaid">flowchart LR
start_agent([start_agent])
specialist_topic[specialist_topic]
general_support[general_support]
start_agent --> general_support
general_support ==> specialist_topic
click start_agent onNodeClick
click specialist_topic onNodeClick
click general_support onNodeClick</div>
</div>
<div class="stats-bar">
<span><strong>2</strong> topics</span>
<span><strong>1</strong> variables</span>
<span><strong>1</strong> action defs</span>
<span><strong>3</strong> reasoning steps</span>
</div>
<div class="legend">→ transition | ⇒ delegate | ([name]) = entry point | <em>click a node for details</em></div>
<div class="detail-panel" id="detail-TopicDelegation"></div>
</div>
</main>
<script>
const allData = {"ComplexStateManagement":{"agentName":"ComplexStateManagement","agentLabel":"ComplexStateManagement","agentDescription":"Manages a todo list with complex state operations","variables":[{"name":"node","type":"unknown","mutable":false,"linked":false},{"name":"span","type":"unknown","mutable":false,"linked":false}],"topics":[{"safeId":"start_agent","name":"start_agent","description":null,"is_entry":true,"actions":[],"transitions_to":["task_management"],"delegates_to":[],"var_reads":[],"var_writes":[]},{"safeId":"task_management","name":"task_management","description":null,"is_entry":false,"actions":[{"name":"save_tasks","target":"@actions.save_tasks"},{"name":"calculate_stats","target":"@actions.calculate_stats"}],"transitions_to":[],"delegates_to":[],"var_reads":[],"var_writes":[]}]},"ConditionalLogicPatterns":{"agentName":"ConditionalLogicPatterns","agentLabel":"ConditionalLogicPatterns","agentDescription":"Evaluates loan applications using complex conditional logic","variables":[{"name":"node","type":"unknown","mutable":false,"linked":false},{"name":"span","type":"unknown","mutable":false,"linked":false}],"topics":[{"safeId":"start_agent","name":"start_agent","description":null,"is_entry":true,"actions":[],"transitions_to":["loan_evaluation"],"delegates_to":[],"var_reads":[],"var_writes":[]},{"safeId":"loan_evaluation","name":"loan_evaluation","description":null,"is_entry":false,"actions":[{"name":"calculate_ratio","target":"@actions.calculate_debt_ratio"}],"transitions_to":[],"delegates_to":[],"var_reads":[],"var_writes":[]}]},"ContextHandling":{"agentName":"ContextHandling","agentLabel":"ContextHandling","agentDescription":"Uses platform context for personalized experiences","variables":[{"name":"node","type":"unknown","mutable":false,"linked":false},{"name":"span","type":"unknown","mutable":false,"linked":false}],"topics":[{"safeId":"start_agent","name":"start_agent","description":null,"is_entry":true,"actions":[],"transitions_to":["personalized_service"],"delegates_to":[],"var_reads":[],"var_writes":[]},{"safeId":"personalized_service","name":"personalized_service","description":null,"is_entry":false,"actions":[{"name":"log_interaction","target":"@actions.log_interaction"}],"transitions_to":[],"delegates_to":[],"var_reads":[],"var_writes":[]}]},"CustomerServiceAgent":{"agentName":"CustomerService_Agent","agentLabel":"Customer Service Agent","agentDescription":"Complete customer service agent with issue classification, resolution workflows, and escalation","variables":[{"name":"node","type":"unknown","mutable":false,"linked":false},{"name":"span","type":"unknown","mutable":false,"linked":false}],"topics":[{"safeId":"start_agent","name":"start_agent","description":null,"is_entry":true,"actions":[],"transitions_to":["triage"],"delegates_to":[],"var_reads":[],"var_writes":[]},{"safeId":"closure","name":"closure","description":null,"is_entry":false,"actions":[{"name":"send_survey","target":"@actions.send_satisfaction_survey"},{"name":"new_issue","target":"@topic.triage"}],"transitions_to":["triage"],"delegates_to":[],"var_reads":[],"var_writes":[]},{"safeId":"triage","name":"triage","description":null,"is_entry":false,"actions":[{"name":"classify_customer_issue","target":"@actions.classify_issue"}],"transitions_to":[],"delegates_to":[],"var_reads":[],"var_writes":[]},{"safeId":"solution_presentation","name":"solution_presentation","description":null,"is_entry":false,"actions":[{"name":"mark_resolved","target":"@actions.update_case"},{"name":"need_more_help","target":"@topic.escalation"}],"transitions_to":["escalation"],"delegates_to":[],"var_reads":[],"var_writes":[]},{"safeId":"resolution","name":"resolution","description":null,"is_entry":false,"actions":[{"name":"find_solution","target":"@actions.search_knowledge_base"},{"name":"present_solution","target":"@topic.solution_presentation"},{"name":"escalate_to_specialist","target":"@topic.escalation"}],"transitions_to":["solution_presentation","escalation"],"delegates_to":[],"var_reads":[],"var_writes":[]},{"safeId":"escalation","name":"escalation","description":null,"is_entry":false,"actions":[{"name":"escalate_issue","target":"@actions.escalate_case"}],"transitions_to":[],"delegates_to":[],"var_reads":[],"var_writes":[]}]},"DynamicActionRouting":{"agentName":"DynamicActionRouting","agentLabel":"DynamicActionRouting","agentDescription":"Routes support tickets with context-aware action availability","variables":[{"name":"node","type":"unknown","mutable":false,"linked":false},{"name":"span","type":"unknown","mutable":false,"linked":false}],"topics":[{"safeId":"start_agent","name":"start_agent","description":null,"is_entry":true,"actions":[],"transitions_to":["ticket_management"],"delegates_to":[],"var_reads":[],"var_writes":[]},{"safeId":"ticket_management","name":"ticket_management","description":null,"is_entry":false,"actions":[{"name":"view_ticket","target":"@actions.view_ticket"},{"name":"add_comment","target":"@actions.add_comment"},{"name":"assign_ticket","target":"@actions.assign_ticket"},{"name":"update_status","target":"@actions.update_status"},{"name":"close_ticket","target":"@actions.close_ticket"},{"name":"escalate_ticket","target":"@actions.escalate_ticket"},{"name":"reassign_ticket","target":"@actions.reassign_ticket"},{"name":"delete_ticket","target":"@actions.delete_ticket"}],"transitions_to":[],"delegates_to":[],"var_reads":[],"var_writes":[]}]},"EscalationPatterns":{"agentName":"EscalationPatterns","agentLabel":"EscalationPatterns","agentDescription":"Demonstrates patterns for escalating to human agents","variables":[{"name":"node","type":"unknown","mutable":false,"linked":false},{"name":"span","type":"unknown","mutable":false,"linked":false}],"topics":[{"safeId":"start_agent","name":"start_agent","description":null,"is_entry":true,"actions":[],"transitions_to":["general_support"],"delegates_to":[],"var_reads":[],"var_writes":[]},{"safeId":"general_support","name":"general_support","description":null,"is_entry":false,"actions":[{"name":"escalate_to_human","target":"@utils.escalate"}],"transitions_to":[],"delegates_to":[],"var_reads":[],"var_writes":[]}]},"InstructionActionReferences":{"agentName":"InstructionActionReferences","agentLabel":"InstructionActionReferences","agentDescription":"Demonstrates embedding action references in instructions","variables":[{"name":"node","type":"unknown","mutable":false,"linked":false},{"name":"span","type":"unknown","mutable":false,"linked":false}],"topics":[{"safeId":"start_agent","name":"start_agent","description":null,"is_entry":true,"actions":[],"transitions_to":["case_management"],"delegates_to":[],"var_reads":[],"var_writes":[]},{"safeId":"case_management","name":"case_management","description":null,"is_entry":false,"actions":[{"name":"create_case","target":"@actions.create_case"}],"transitions_to":[],"delegates_to":[],"var_reads":[],"var_writes":[]}]},"MultiTopicOrchestration":{"agentName":"MultiTopicOrchestration","agentLabel":"MultiTopicOrchestration","agentDescription":"Demonstrates complex multi-topic orchestration with specialized topics","variables":[{"name":"node","type":"unknown","mutable":false,"linked":false},{"name":"span","type":"unknown","mutable":false,"linked":false}],"topics":[{"safeId":"start_agent","name":"start_agent","description":null,"is_entry":true,"actions":[],"transitions_to":["orchestrator"],"delegates_to":[],"var_reads":[],"var_writes":[]},{"safeId":"car_booking","name":"car_booking","description":null,"is_entry":false,"actions":[{"name":"book_car_action","target":"@actions.book_car"}],"transitions_to":[],"delegates_to":[],"var_reads":[],"var_writes":[]},{"safeId":"orchestrator","name":"orchestrator","description":null,"is_entry":false,"actions":[{"name":"start_flight_booking","target":"@topic.flight_booking"},{"name":"start_hotel_booking","target":"@topic.hotel_booking"},{"name":"start_car_booking","target":"@topic.car_booking"},{"name":"complete_booking","target":"@actions.send_itinerary"}],"transitions_to":["flight_booking","hotel_booking","car_booking"],"delegates_to":[],"var_reads":[],"var_writes":[]},{"safeId":"hotel_booking","name":"hotel_booking","description":null,"is_entry":false,"actions":[{"name":"book_hotel_action","target":"@actions.book_hotel"}],"transitions_to":[],"delegates_to":[],"var_reads":[],"var_writes":[]},{"safeId":"flight_booking","name":"flight_booking","description":null,"is_entry":false,"actions":[{"name":"book_flight_action","target":"@actions.book_flight"}],"transitions_to":[],"delegates_to":[],"var_reads":[],"var_writes":[]}]},"SafetyAndGuardrails":{"agentName":"SafetyAndGuardrails","agentLabel":"SafetyAndGuardrails","agentDescription":"Handles sensitive data deletion with safety guardrails","variables":[{"name":"node","type":"unknown","mutable":false,"linked":false},{"name":"span","type":"unknown","mutable":false,"linked":false}],"topics":[{"safeId":"start_agent","name":"start_agent","description":null,"is_entry":true,"actions":[],"transitions_to":["data_management"],"delegates_to":[],"var_reads":[],"var_writes":[]},{"safeId":"data_management","name":"data_management","description":null,"is_entry":false,"actions":[{"name":"delete_record","target":"@actions.delete_record"},{"name":"user_confirmation","target":"@utils.setVariables"}],"transitions_to":[],"delegates_to":[],"var_reads":[],"var_writes":[]}]},"TopicDelegation":{"agentName":"TopicDelegation","agentLabel":"TopicDelegation","agentDescription":"Demonstrates calling topics as tools","variables":[{"name":"node","type":"unknown","mutable":false,"linked":false},{"name":"span","type":"unknown","mutable":false,"linked":false}],"topics":[{"safeId":"start_agent","name":"start_agent","description":null,"is_entry":true,"actions":[],"transitions_to":["general_support"],"delegates_to":[],"var_reads":[],"var_writes":[]},{"safeId":"specialist_topic","name":"specialist_topic","description":null,"is_entry":false,"actions":[{"name":"analyze_account","target":"@actions.analyze_account"}],"transitions_to":[],"delegates_to":[],"var_reads":[],"var_writes":[]},{"safeId":"general_support","name":"general_support","description":null,"is_entry":false,"actions":[{"name":"consult_specialist","target":"@topic.specialist_topic"}],"transitions_to":[],"delegates_to":["specialist_topic"],"var_reads":[],"var_writes":[]}]}};
mermaid.initialize({ startOnLoad: false, theme: 'dark' });
const rendered = new Set();
let currentAgentId = null;
function showAgent(id) {
document.querySelectorAll('.agent-section').forEach(el => el.classList.remove('active'));
document.querySelectorAll('.nav-item').forEach(el => el.classList.remove('active'));
const section = document.getElementById('section-' + id);
const nav = document.getElementById('nav-' + id);
if (!section) return;
section.classList.add('active');
if (nav) nav.classList.add('active');
currentAgentId = id;
if (!rendered.has(id)) {
rendered.add(id);
mermaid.run({ nodes: section.querySelectorAll('.mermaid') });
}
history.replaceState(null, '', '#' + id);
showOverview(id);
}
function showOverview(agentId) {
const data = allData[agentId];
const panel = document.getElementById('detail-' + agentId);
if (!panel || !data) return;
const descHtml = data.agentDescription
? '<p class="detail-desc">' + esc(data.agentDescription) + '</p>' : '';
const varRows = data.variables.length
? data.variables.map(v => {
const mods = [v.mutable ? 'mutable' : '', v.linked ? 'linked' : ''].filter(Boolean).join(' ');
return '<tr><td>' + esc(v.name) + '</td><td class="var-type">' + esc(v.type) + '</td><td class="var-mod">' + esc(mods) + '</td></tr>';
}).join('')
: '<tr><td colspan="3" class="empty-msg">No variables defined</td></tr>';
panel.innerHTML = '<div class="detail-card">' +
'<div class="detail-title">Agent Overview</div>' +
descHtml +
'<div class="overview-grid">' +
'<div class="detail-section"><div class="detail-section-title">Variables (' + data.variables.length + ')</div>' +
'<table class="var-table"><thead><tr><th>Name</th><th>Type</th><th>Modifiers</th></tr></thead><tbody>' + varRows + '</tbody></table></div>' +
'<div class="detail-section"><div class="detail-section-title">Topics (' + data.topics.length + ')</div>' +
'<div class="tag-list">' + data.topics.map(t =>
'<span class="tag tag-topic">' + esc(t.name) + (t.is_entry ? ' ★' : '') + '</span>'
).join('') + '</div></div>' +
'</div></div>';
}
function onNodeClick(nodeId) {
if (!currentAgentId) return;
const data = allData[currentAgentId];
if (!data) return;
const topic = data.topics.find(t => t.safeId === nodeId);
if (!topic) return;
const panel = document.getElementById('detail-' + currentAgentId);
if (!panel) return;
const descHtml = topic.description
? '<p class="detail-desc">' + esc(topic.description) + '</p>' : '';
const actionsHtml = topic.actions.length
? '<div class="tag-list">' + topic.actions.map(a => '<span class="tag tag-action">' + esc(a) + '</span>').join('') + '</div>'
: '<span class="empty-msg">None</span>';
const transHtml = topic.transitions_to.length
? '<div class="tag-list">' + topic.transitions_to.map(t => '<span class="tag tag-topic">' + esc(t) + '</span>').join('') + '</div>'
: '<span class="empty-msg">None (terminal topic)</span>';
const delegHtml = topic.delegates_to.length
? '<div class="tag-list">' + topic.delegates_to.map(t => '<span class="tag tag-delegate">' + esc(t) + '</span>').join('') + '</div>'
: '';
const readsHtml = topic.var_reads.length
? '<div class="tag-list">' + topic.var_reads.map(v => '<span class="tag tag-var-read">' + esc(v) + '</span>').join('') + '</div>'
: '<span class="empty-msg">None</span>';
const writesHtml = topic.var_writes.length
? '<div class="tag-list">' + topic.var_writes.map(v => '<span class="tag tag-var-write">' + esc(v) + '</span>').join('') + '</div>'
: '<span class="empty-msg">None</span>';
panel.innerHTML =
'<div class="detail-back" onclick="showOverview(currentAgentId)">← back to overview</div>' +
'<div class="detail-card">' +
'<div class="detail-title">' + esc(topic.name) + (topic.is_entry ? ' <span class="entry-badge">entry</span>' : '') + '</div>' +
descHtml +
(topic.actions.length ? '<div class="detail-section"><div class="detail-section-title">Actions (' + topic.actions.length + ')</div>' + actionsHtml + '</div>' : '') +
'<div class="detail-section"><div class="detail-section-title">Transitions to</div>' + transHtml + '</div>' +
(topic.delegates_to.length ? '<div class="detail-section"><div class="detail-section-title">Delegates to</div>' + delegHtml + '</div>' : '') +
'<div class="detail-section"><div class="detail-section-title">Variables read</div>' + readsHtml + '</div>' +
'<div class="detail-section"><div class="detail-section-title">Variables written</div>' + writesHtml + '</div>' +
'</div>';
}
function esc(str) {
if (!str) return '';
return String(str).replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>').replace(/"/g,'"');
}
const hash = location.hash.slice(1);
const firstId = 'ComplexStateManagement';
showAgent(hash && document.getElementById('section-' + hash) ? hash : firstId);
</script>
</body>
</html>