// Populate the sidebar // // This is a script, and not included directly in the page, to control the total size of the book. // The TOC contains an entry for each page, so if each page includes a copy of the TOC, // the total size of the page becomes O(n**2). class MDBookSidebarScrollbox extends HTMLElement { constructor() { super(); } connectedCallback() { this.innerHTML = '
  1. Home
  2. Installation Guide
  3. Installation Validation Guide
  4. Getting Started
  5. Quick Start Cheatsheet
  6. Setup Quick Start
  7. Setup System Guide
  8. Quick Start (Full)
  9. Prerequisites
  10. Installation Steps
  11. First Deployment
  12. Verification
  13. Platform Service Configuration
  14. System Overview
  15. Architecture Overview
  16. Design Principles
  17. Integration Patterns
  18. Orchestrator Integration Model
  19. Multi-Repo Architecture
  20. Multi-Repo Strategy
  21. Database and Config Architecture
  22. Ecosystem Integration
  23. Package and Loader System
  24. Config Loading Architecture
  25. Nickel Executable Examples
  26. Orchestrator Info
  27. Orchestrator Auth Integration
  28. Repo Dist Analysis
  29. TypeDialog Nickel Integration
  30. ADR-001: Project Structure
  31. ADR-002: Distribution Strategy
  32. ADR-003: Workspace Isolation
  33. ADR-004: Hybrid Architecture
  34. ADR-005: Extension Framework
  35. ADR-006: Provisioning CLI Refactoring
  36. ADR-007: KMS Simplification
  37. ADR-008: Cedar Authorization
  38. ADR-009: Security System Complete
  39. ADR-010: Configuration Format Strategy
  40. ADR-011: Nickel Migration
  41. ADR-012: Nushell Nickel Plugin CLI Wrapper
  42. ADR-013: Typdialog Web UI Backend Integration
  43. ADR-014: SecretumVault Integration
  44. ADR-015: AI Integration Architecture
  45. Overview
  46. Architecture
  47. Natural Language Configuration
  48. AI-Assisted Forms
  49. AI Agents
  50. Configuration Generation
  51. RAG System
  52. MCP Integration
  53. Security Policies
  54. Troubleshooting with AI
  55. API Reference
  56. Configuration
  57. Cost Management
  58. REST API
  59. WebSocket
  60. Extensions
  61. SDKs
  62. Integration Examples
  63. Provider API
  64. NuShell API
  65. Path Resolution
  66. Extension Development
  67. Infrastructure-Specific Extensions
  68. Quick Provider Guide
  69. Command Handler Guide
  70. Configuration
  71. Workflow
  72. Integration
  73. Build System
  74. Extensions
  75. Distribution Process
  76. Implementation Guide
  77. TaskServ Developer Guide
  78. TaskServ Quick Guide
  79. Project Structure
  80. Provider Agnostic Architecture
  81. Ctrl-C Implementation Notes
  82. Auth Metadata Guide
  83. Migration Guide
  84. KMS Simplification
  85. Migration Example
  86. Glossary
  87. Provider Distribution Guide
  88. TaskServ Categorization
  89. Extension Registry
  90. MCP Server
  91. TypeDialog Platform Config Guide
  92. Provider Comparison Matrix
  93. Platform Deployment Guide
  94. Service Management Guide
  95. Monitoring & Alerting Setup
  96. Service Management Quick Reference
  97. CoreDNS Guide
  98. Backup Recovery
  99. Deployment
  100. Monitoring
  101. Production Readiness Checklist
  102. Break Glass Training Guide
  103. Cedar Policies Production Guide
  104. MFA Admin Setup Guide
  105. Orchestrator
  106. Orchestrator System
  107. Control Center
  108. Installer
  109. Installer System
  110. Provisioning Server
  111. Infrastructure Management
  112. Infrastructure from Code Guide
  113. Batch Workflow System
  114. Batch Workflow Multi-Provider Examples
  115. CLI Architecture
  116. Configuration System
  117. Workspace Setup
  118. Workspace Switching Guide
  119. Workspace Switching System
  120. CLI Reference
  121. Workspace Config Architecture
  122. Dynamic Secrets Guide
  123. Mode System Guide
  124. Workspace Guide
  125. Workspace Enforcement Guide
  126. Workspace Infra Reference
  127. Workspace Config Commands
  128. Config Rendering Guide
  129. Configuration
  130. Authentication Layer Guide
  131. Config Encryption Guide
  132. Security System
  133. RustyVault KMS Guide
  134. SecretumVault KMS Guide
  135. SSH Temporal Keys User Guide
  136. Plugin Integration Guide
  137. NuShell Plugins Guide
  138. NuShell Plugins System
  139. Plugin Usage Guide
  140. Secrets Management Guide
  141. Auth Quick Reference
  142. Config Encryption Quick Reference
  143. KMS Service
  144. Gitea Integration Guide
  145. Service Mesh Ingress Guide
  146. OCI Registry Guide
  147. Integrations Quick Start
  148. Secrets Service Layer Complete
  149. OCI Registry Platform
  150. Test Environment Guide
  151. Test Environment Usage
  152. Test Environment System
  153. TaskServ Validation Guide
  154. Troubleshooting Guide
  155. From Scratch
  156. Update Infrastructure
  157. Customize Infrastructure
  158. Infrastructure Setup
  159. Extension Development Quickstart
  160. Guide System
  161. Workspace Generation Quick Reference
  162. Workspace Documentation Migration
  163. Multi-Provider Deployment Guide
  164. Multi-Provider Networking with VPN
  165. DigitalOcean Provider Guide
  166. Hetzner Provider Guide
  167. Multi-Provider Web App Workspace
  168. Multi-Region High Availability Workspace
  169. Cost-Optimized Multi-Provider Workspace
  170. Master Index
  171. Platform Operations Cheatsheet
  172. General Commands
  173. JustFile Recipes
  174. OCI Registry
  175. Sudo Password Handling
  176. Config Validation
  177. Workspace Config Architecture
'; // Set the current, active page, and reveal it if it's hidden let current_page = document.location.href.toString().split("#")[0].split("?")[0]; if (current_page.endsWith("/")) { current_page += "index.html"; } var links = Array.prototype.slice.call(this.querySelectorAll("a")); var l = links.length; for (var i = 0; i < l; ++i) { var link = links[i]; var href = link.getAttribute("href"); if (href && !href.startsWith("#") && !/^(?:[a-z+]+:)?\/\//.test(href)) { link.href = path_to_root + href; } // The "index" page is supposed to alias the first chapter in the book. if (link.href === current_page || (i === 0 && path_to_root === "" && current_page.endsWith("/index.html"))) { link.classList.add("active"); var parent = link.parentElement; if (parent && parent.classList.contains("chapter-item")) { parent.classList.add("expanded"); } while (parent) { if (parent.tagName === "LI" && parent.previousElementSibling) { if (parent.previousElementSibling.classList.contains("chapter-item")) { parent.previousElementSibling.classList.add("expanded"); } } parent = parent.parentElement; } } } // Track and set sidebar scroll position this.addEventListener('click', function(e) { if (e.target.tagName === 'A') { sessionStorage.setItem('sidebar-scroll', this.scrollTop); } }, { passive: true }); var sidebarScrollTop = sessionStorage.getItem('sidebar-scroll'); sessionStorage.removeItem('sidebar-scroll'); if (sidebarScrollTop) { // preserve sidebar scroll position when navigating via links within sidebar this.scrollTop = sidebarScrollTop; } else { // scroll sidebar to current active section when navigating via "next/previous chapter" buttons var activeSection = document.querySelector('#sidebar .active'); if (activeSection) { activeSection.scrollIntoView({ block: 'center' }); } } // Toggle buttons var sidebarAnchorToggles = document.querySelectorAll('#sidebar a.toggle'); function toggleSection(ev) { ev.currentTarget.parentElement.classList.toggle('expanded'); } Array.from(sidebarAnchorToggles).forEach(function (el) { el.addEventListener('click', toggleSection); }); } } window.customElements.define("mdbook-sidebar-scrollbox", MDBookSidebarScrollbox);