index.html 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta name="referrer" content="no-referrer">
  7. <title>Pipeline Dashboard</title>
  8. <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
  9. <link rel="stylesheet" href="/static/style.css">
  10. </head>
  11. <body>
  12. <div class="app-container">
  13. <!-- Sidebar -->
  14. <aside class="sidebar glass-panel">
  15. <div class="sidebar-header">
  16. <h2>⚡ Pipeline Tasks</h2>
  17. <div class="stats" id="stats-container">
  18. <!-- Stats injected via JS -->
  19. </div>
  20. </div>
  21. <div class="search-box" style="display: flex; gap: 8px;">
  22. <input type="text" id="search-input" placeholder="Search requirements..." style="flex: 1;">
  23. <button class="btn btn-secondary btn-small" id="btn-open-prompts" title="Edit Prompts" style="padding: 0 10px;">⚙️</button>
  24. </div>
  25. <div class="task-list" id="task-list">
  26. <!-- Task items injected via JS -->
  27. <div class="loading">Loading tasks...</div>
  28. </div>
  29. </aside>
  30. <!-- Main Content -->
  31. <main class="main-content glass-panel" id="main-content">
  32. <div class="empty-state" id="empty-state">
  33. <div class="icon">✨</div>
  34. <h2>Select a requirement to view details</h2>
  35. <p>Monitor pipeline execution and view generated data</p>
  36. </div>
  37. <div class="detail-view hidden" id="detail-view">
  38. <div class="detail-header">
  39. <div class="title-section">
  40. <span class="badge" id="detail-id">001</span>
  41. <h1 id="detail-title">Requirement Title</h1>
  42. </div>
  43. <div class="actions">
  44. <button class="btn btn-primary" id="btn-open-run-modal">🚀 Run Pipeline</button>
  45. </div>
  46. </div>
  47. <div class="status-banner hidden" id="status-banner">
  48. <div class="status-indicator"></div>
  49. <span id="status-text">Running...</span>
  50. <button class="btn btn-small" id="btn-view-logs">View Logs</button>
  51. <button class="btn btn-small" id="btn-stop-pipeline" style="background-color: var(--danger); border-color: var(--danger); margin-left: 10px; display: none;">🛑 Stop</button>
  52. </div>
  53. <div class="memo-container" id="memo-container">
  54. <div class="memo-header">
  55. <div class="memo-title">📝 Requirement Notes</div>
  56. <div style="display:flex; align-items:center; gap:10px;">
  57. <span class="save-status" id="memo-status"></span>
  58. <button class="btn btn-small btn-primary" id="btn-save-memo" style="padding: 4px 12px; min-width: 60px">Save</button>
  59. </div>
  60. </div>
  61. <textarea class="memo-textarea" id="memo-textarea" placeholder="Add notes, context, or issues for this requirement here..."></textarea>
  62. </div>
  63. <div class="data-tabs">
  64. <button class="tab-btn active" data-target="tab-strategy">Strategy</button>
  65. <button class="tab-btn" data-target="tab-blueprint">Blueprint</button>
  66. <button class="tab-btn" data-target="tab-caps">Capabilities</button>
  67. <button class="tab-btn" data-target="tab-raw">Raw Cases</button>
  68. <button class="tab-btn" data-target="tab-source">Source</button>
  69. </div>
  70. <div class="tab-content-container">
  71. <div class="tab-content active" id="tab-strategy">
  72. <div class="content-viewer" id="json-strategy">Loading...</div>
  73. </div>
  74. <div class="tab-content" id="tab-blueprint">
  75. <div class="content-viewer" id="json-blueprint">Loading...</div>
  76. </div>
  77. <div class="tab-content" id="tab-caps">
  78. <div class="content-viewer" id="json-caps">Loading...</div>
  79. </div>
  80. <div class="tab-content" id="tab-raw">
  81. <div class="content-viewer" id="json-raw">Loading...</div>
  82. </div>
  83. <div class="tab-content" id="tab-source">
  84. <div class="content-viewer" id="json-source">Loading...</div>
  85. </div>
  86. </div>
  87. </div>
  88. </main>
  89. </div>
  90. <!-- Run Modal -->
  91. <div class="modal-overlay hidden" id="run-modal">
  92. <div class="modal glass-panel">
  93. <div class="modal-header">
  94. <h3>Configure Pipeline Run</h3>
  95. <button class="close-btn" id="btn-close-modal">×</button>
  96. </div>
  97. <div class="modal-body">
  98. <div class="form-group">
  99. <label>Restart From</label>
  100. <select id="select-force-phase" class="glass-input" style="background-color: #1e293b; color: white; margin-top: 5px;">
  101. <option value="smart">Smart Resume (Continue where left off)</option>
  102. <optgroup label="Single Step (No Cascading)">
  103. <option value="single_platforms">Single Step: Re-run Platforms (Deletes chosen platforms ONLY)</option>
  104. <option value="single_blueprint">Single Step: Re-run Blueprint (Deletes Blueprint ONLY)</option>
  105. <option value="single_capabilities">Single Step: Re-run Capabilities (Deletes Capabilities ONLY)</option>
  106. <option value="single_strategy">Single Step: Re-run Strategy (Deletes Strategy ONLY)</option>
  107. </optgroup>
  108. <optgroup label="Cascading Regeneration">
  109. <option value="phase1_platforms">Phase 1: Specific Platforms -> Downstream</option>
  110. <option value="phase2_blueprint">Phase 2: Blueprint -> Strategy</option>
  111. <option value="phase2_capabilities">Phase 2: Capabilities -> Strategy</option>
  112. <option value="phase2_all">Phase 2: All Phase 2 -> Strategy</option>
  113. <option value="phase3">Phase 3: Strategy Only</option>
  114. </optgroup>
  115. </select>
  116. </div>
  117. <div class="form-group" id="group-platforms">
  118. <label>Platforms (comma separated)</label>
  119. <input type="text" id="input-platforms" value="xhs,youtube,bili,x" class="glass-input">
  120. </div>
  121. <div class="form-group checkbox" style="margin-top: 15px;">
  122. <input type="checkbox" id="check-claude-sdk">
  123. <label for="check-claude-sdk">Use Anthropic SDK Core</label>
  124. </div>
  125. </div>
  126. <div class="modal-footer">
  127. <button class="btn btn-secondary" id="btn-cancel-run">Cancel</button>
  128. <button class="btn btn-primary" id="btn-confirm-run">Execute</button>
  129. </div>
  130. </div>
  131. </div>
  132. <!-- Logs Modal -->
  133. <div class="modal-overlay hidden" id="logs-modal">
  134. <div class="modal large glass-panel">
  135. <div class="modal-header">
  136. <h3>Execution Logs</h3>
  137. <button class="close-btn" id="btn-close-logs">×</button>
  138. </div>
  139. <div class="modal-body">
  140. <pre class="terminal" id="terminal-logs">Waiting for logs...</pre>
  141. </div>
  142. </div>
  143. </div>
  144. <!-- Prompts Modal -->
  145. <div class="modal-overlay hidden" id="prompts-modal">
  146. <div class="modal large glass-panel" style="max-width: 90vw; height: 90vh; display: flex; flex-direction: column;">
  147. <div class="modal-header">
  148. <h3>⚙️ Prompts Editor</h3>
  149. <div style="display:flex; align-items:center; gap:10px;">
  150. <span class="save-status" id="prompt-save-status"></span>
  151. <button class="btn btn-primary btn-small" id="btn-save-prompt">Save Changes</button>
  152. <button class="close-btn" id="btn-close-prompts">×</button>
  153. </div>
  154. </div>
  155. <div class="modal-body" style="flex: 1; display: flex; gap: 1rem; overflow: hidden; padding: 1rem;">
  156. <div class="prompt-sidebar" style="width: 250px; border-right: 1px solid rgba(255,255,255,0.1); padding-right: 1rem; overflow-y: auto;">
  157. <h4 style="margin-top:0; margin-bottom:1rem; color:var(--text-muted)">Available Prompts</h4>
  158. <div id="prompt-list" style="display:flex; flex-direction:column; gap:0.5rem;">
  159. <!-- Prompt tabs injected via JS -->
  160. </div>
  161. </div>
  162. <div class="prompt-editor" style="flex: 1; display: flex; flex-direction: column;">
  163. <textarea id="prompt-textarea" style="width:100%; height:100%; background:rgba(15,23,42,0.8); color:var(--text-main); font-family:monospace; padding:1rem; border:1px solid rgba(255,255,255,0.1); border-radius:6px; resize:none; font-size:14px;" placeholder="Select a prompt to edit..."></textarea>
  164. </div>
  165. </div>
  166. </div>
  167. </div>
  168. <script src="/static/app.js"></script>
  169. </body>
  170. </html>