spec-kitty-cli 0.12.1__py3-none-any.whl

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.
Files changed (242) hide show
  1. spec_kitty_cli-0.12.1.dist-info/METADATA +1767 -0
  2. spec_kitty_cli-0.12.1.dist-info/RECORD +242 -0
  3. spec_kitty_cli-0.12.1.dist-info/WHEEL +4 -0
  4. spec_kitty_cli-0.12.1.dist-info/entry_points.txt +2 -0
  5. spec_kitty_cli-0.12.1.dist-info/licenses/LICENSE +21 -0
  6. specify_cli/__init__.py +171 -0
  7. specify_cli/acceptance.py +627 -0
  8. specify_cli/agent_utils/README.md +157 -0
  9. specify_cli/agent_utils/__init__.py +9 -0
  10. specify_cli/agent_utils/status.py +356 -0
  11. specify_cli/cli/__init__.py +6 -0
  12. specify_cli/cli/commands/__init__.py +46 -0
  13. specify_cli/cli/commands/accept.py +189 -0
  14. specify_cli/cli/commands/agent/__init__.py +22 -0
  15. specify_cli/cli/commands/agent/config.py +382 -0
  16. specify_cli/cli/commands/agent/context.py +191 -0
  17. specify_cli/cli/commands/agent/feature.py +1057 -0
  18. specify_cli/cli/commands/agent/release.py +11 -0
  19. specify_cli/cli/commands/agent/tasks.py +1253 -0
  20. specify_cli/cli/commands/agent/workflow.py +801 -0
  21. specify_cli/cli/commands/context.py +246 -0
  22. specify_cli/cli/commands/dashboard.py +85 -0
  23. specify_cli/cli/commands/implement.py +973 -0
  24. specify_cli/cli/commands/init.py +827 -0
  25. specify_cli/cli/commands/init_help.py +62 -0
  26. specify_cli/cli/commands/merge.py +755 -0
  27. specify_cli/cli/commands/mission.py +240 -0
  28. specify_cli/cli/commands/ops.py +265 -0
  29. specify_cli/cli/commands/orchestrate.py +640 -0
  30. specify_cli/cli/commands/repair.py +175 -0
  31. specify_cli/cli/commands/research.py +165 -0
  32. specify_cli/cli/commands/sync.py +364 -0
  33. specify_cli/cli/commands/upgrade.py +249 -0
  34. specify_cli/cli/commands/validate_encoding.py +186 -0
  35. specify_cli/cli/commands/validate_tasks.py +186 -0
  36. specify_cli/cli/commands/verify.py +310 -0
  37. specify_cli/cli/helpers.py +123 -0
  38. specify_cli/cli/step_tracker.py +91 -0
  39. specify_cli/cli/ui.py +192 -0
  40. specify_cli/core/__init__.py +53 -0
  41. specify_cli/core/agent_context.py +311 -0
  42. specify_cli/core/config.py +96 -0
  43. specify_cli/core/context_validation.py +362 -0
  44. specify_cli/core/dependency_graph.py +351 -0
  45. specify_cli/core/git_ops.py +129 -0
  46. specify_cli/core/multi_parent_merge.py +323 -0
  47. specify_cli/core/paths.py +260 -0
  48. specify_cli/core/project_resolver.py +110 -0
  49. specify_cli/core/stale_detection.py +263 -0
  50. specify_cli/core/tool_checker.py +79 -0
  51. specify_cli/core/utils.py +43 -0
  52. specify_cli/core/vcs/__init__.py +114 -0
  53. specify_cli/core/vcs/detection.py +341 -0
  54. specify_cli/core/vcs/exceptions.py +85 -0
  55. specify_cli/core/vcs/git.py +1304 -0
  56. specify_cli/core/vcs/jujutsu.py +1208 -0
  57. specify_cli/core/vcs/protocol.py +285 -0
  58. specify_cli/core/vcs/types.py +249 -0
  59. specify_cli/core/version_checker.py +261 -0
  60. specify_cli/core/worktree.py +506 -0
  61. specify_cli/dashboard/__init__.py +28 -0
  62. specify_cli/dashboard/diagnostics.py +204 -0
  63. specify_cli/dashboard/handlers/__init__.py +17 -0
  64. specify_cli/dashboard/handlers/api.py +143 -0
  65. specify_cli/dashboard/handlers/base.py +65 -0
  66. specify_cli/dashboard/handlers/features.py +390 -0
  67. specify_cli/dashboard/handlers/router.py +81 -0
  68. specify_cli/dashboard/handlers/static.py +50 -0
  69. specify_cli/dashboard/lifecycle.py +541 -0
  70. specify_cli/dashboard/scanner.py +437 -0
  71. specify_cli/dashboard/server.py +123 -0
  72. specify_cli/dashboard/static/dashboard/dashboard.css +722 -0
  73. specify_cli/dashboard/static/dashboard/dashboard.js +1424 -0
  74. specify_cli/dashboard/static/spec-kitty.png +0 -0
  75. specify_cli/dashboard/templates/__init__.py +36 -0
  76. specify_cli/dashboard/templates/index.html +258 -0
  77. specify_cli/doc_generators.py +621 -0
  78. specify_cli/doc_state.py +408 -0
  79. specify_cli/frontmatter.py +384 -0
  80. specify_cli/gap_analysis.py +915 -0
  81. specify_cli/gitignore_manager.py +300 -0
  82. specify_cli/guards.py +145 -0
  83. specify_cli/legacy_detector.py +83 -0
  84. specify_cli/manifest.py +286 -0
  85. specify_cli/merge/__init__.py +63 -0
  86. specify_cli/merge/executor.py +653 -0
  87. specify_cli/merge/forecast.py +215 -0
  88. specify_cli/merge/ordering.py +126 -0
  89. specify_cli/merge/preflight.py +230 -0
  90. specify_cli/merge/state.py +185 -0
  91. specify_cli/merge/status_resolver.py +354 -0
  92. specify_cli/mission.py +654 -0
  93. specify_cli/missions/documentation/command-templates/implement.md +309 -0
  94. specify_cli/missions/documentation/command-templates/plan.md +275 -0
  95. specify_cli/missions/documentation/command-templates/review.md +344 -0
  96. specify_cli/missions/documentation/command-templates/specify.md +206 -0
  97. specify_cli/missions/documentation/command-templates/tasks.md +189 -0
  98. specify_cli/missions/documentation/mission.yaml +113 -0
  99. specify_cli/missions/documentation/templates/divio/explanation-template.md +192 -0
  100. specify_cli/missions/documentation/templates/divio/howto-template.md +168 -0
  101. specify_cli/missions/documentation/templates/divio/reference-template.md +179 -0
  102. specify_cli/missions/documentation/templates/divio/tutorial-template.md +146 -0
  103. specify_cli/missions/documentation/templates/generators/jsdoc.json.template +18 -0
  104. specify_cli/missions/documentation/templates/generators/sphinx-conf.py.template +36 -0
  105. specify_cli/missions/documentation/templates/plan-template.md +269 -0
  106. specify_cli/missions/documentation/templates/release-template.md +222 -0
  107. specify_cli/missions/documentation/templates/spec-template.md +172 -0
  108. specify_cli/missions/documentation/templates/task-prompt-template.md +140 -0
  109. specify_cli/missions/documentation/templates/tasks-template.md +159 -0
  110. specify_cli/missions/research/command-templates/merge.md +388 -0
  111. specify_cli/missions/research/command-templates/plan.md +125 -0
  112. specify_cli/missions/research/command-templates/review.md +144 -0
  113. specify_cli/missions/research/command-templates/tasks.md +225 -0
  114. specify_cli/missions/research/mission.yaml +115 -0
  115. specify_cli/missions/research/templates/data-model-template.md +33 -0
  116. specify_cli/missions/research/templates/plan-template.md +161 -0
  117. specify_cli/missions/research/templates/research/evidence-log.csv +18 -0
  118. specify_cli/missions/research/templates/research/source-register.csv +18 -0
  119. specify_cli/missions/research/templates/research-template.md +35 -0
  120. specify_cli/missions/research/templates/spec-template.md +64 -0
  121. specify_cli/missions/research/templates/task-prompt-template.md +148 -0
  122. specify_cli/missions/research/templates/tasks-template.md +114 -0
  123. specify_cli/missions/software-dev/command-templates/accept.md +75 -0
  124. specify_cli/missions/software-dev/command-templates/analyze.md +183 -0
  125. specify_cli/missions/software-dev/command-templates/checklist.md +286 -0
  126. specify_cli/missions/software-dev/command-templates/clarify.md +157 -0
  127. specify_cli/missions/software-dev/command-templates/constitution.md +432 -0
  128. specify_cli/missions/software-dev/command-templates/dashboard.md +101 -0
  129. specify_cli/missions/software-dev/command-templates/implement.md +41 -0
  130. specify_cli/missions/software-dev/command-templates/merge.md +383 -0
  131. specify_cli/missions/software-dev/command-templates/plan.md +171 -0
  132. specify_cli/missions/software-dev/command-templates/review.md +32 -0
  133. specify_cli/missions/software-dev/command-templates/specify.md +321 -0
  134. specify_cli/missions/software-dev/command-templates/tasks.md +566 -0
  135. specify_cli/missions/software-dev/mission.yaml +100 -0
  136. specify_cli/missions/software-dev/templates/plan-template.md +132 -0
  137. specify_cli/missions/software-dev/templates/spec-template.md +116 -0
  138. specify_cli/missions/software-dev/templates/task-prompt-template.md +140 -0
  139. specify_cli/missions/software-dev/templates/tasks-template.md +159 -0
  140. specify_cli/orchestrator/__init__.py +75 -0
  141. specify_cli/orchestrator/agent_config.py +224 -0
  142. specify_cli/orchestrator/agents/__init__.py +170 -0
  143. specify_cli/orchestrator/agents/augment.py +112 -0
  144. specify_cli/orchestrator/agents/base.py +243 -0
  145. specify_cli/orchestrator/agents/claude.py +112 -0
  146. specify_cli/orchestrator/agents/codex.py +106 -0
  147. specify_cli/orchestrator/agents/copilot.py +137 -0
  148. specify_cli/orchestrator/agents/cursor.py +139 -0
  149. specify_cli/orchestrator/agents/gemini.py +115 -0
  150. specify_cli/orchestrator/agents/kilocode.py +94 -0
  151. specify_cli/orchestrator/agents/opencode.py +132 -0
  152. specify_cli/orchestrator/agents/qwen.py +96 -0
  153. specify_cli/orchestrator/config.py +455 -0
  154. specify_cli/orchestrator/executor.py +642 -0
  155. specify_cli/orchestrator/integration.py +1230 -0
  156. specify_cli/orchestrator/monitor.py +898 -0
  157. specify_cli/orchestrator/scheduler.py +832 -0
  158. specify_cli/orchestrator/state.py +508 -0
  159. specify_cli/orchestrator/testing/__init__.py +122 -0
  160. specify_cli/orchestrator/testing/availability.py +346 -0
  161. specify_cli/orchestrator/testing/fixtures.py +684 -0
  162. specify_cli/orchestrator/testing/paths.py +218 -0
  163. specify_cli/plan_validation.py +107 -0
  164. specify_cli/scripts/debug-dashboard-scan.py +61 -0
  165. specify_cli/scripts/tasks/acceptance_support.py +695 -0
  166. specify_cli/scripts/tasks/task_helpers.py +506 -0
  167. specify_cli/scripts/tasks/tasks_cli.py +848 -0
  168. specify_cli/scripts/validate_encoding.py +180 -0
  169. specify_cli/task_metadata_validation.py +274 -0
  170. specify_cli/tasks_support.py +447 -0
  171. specify_cli/template/__init__.py +47 -0
  172. specify_cli/template/asset_generator.py +206 -0
  173. specify_cli/template/github_client.py +334 -0
  174. specify_cli/template/manager.py +193 -0
  175. specify_cli/template/renderer.py +99 -0
  176. specify_cli/templates/AGENTS.md +190 -0
  177. specify_cli/templates/POWERSHELL_SYNTAX.md +229 -0
  178. specify_cli/templates/agent-file-template.md +35 -0
  179. specify_cli/templates/checklist-template.md +42 -0
  180. specify_cli/templates/claudeignore-template +58 -0
  181. specify_cli/templates/command-templates/accept.md +141 -0
  182. specify_cli/templates/command-templates/analyze.md +253 -0
  183. specify_cli/templates/command-templates/checklist.md +352 -0
  184. specify_cli/templates/command-templates/clarify.md +224 -0
  185. specify_cli/templates/command-templates/constitution.md +432 -0
  186. specify_cli/templates/command-templates/dashboard.md +175 -0
  187. specify_cli/templates/command-templates/implement.md +190 -0
  188. specify_cli/templates/command-templates/merge.md +374 -0
  189. specify_cli/templates/command-templates/plan.md +171 -0
  190. specify_cli/templates/command-templates/research.md +88 -0
  191. specify_cli/templates/command-templates/review.md +510 -0
  192. specify_cli/templates/command-templates/specify.md +321 -0
  193. specify_cli/templates/command-templates/status.md +92 -0
  194. specify_cli/templates/command-templates/tasks.md +199 -0
  195. specify_cli/templates/git-hooks/pre-commit +22 -0
  196. specify_cli/templates/git-hooks/pre-commit-agent-check +37 -0
  197. specify_cli/templates/git-hooks/pre-commit-encoding-check +142 -0
  198. specify_cli/templates/plan-template.md +108 -0
  199. specify_cli/templates/spec-template.md +118 -0
  200. specify_cli/templates/task-prompt-template.md +165 -0
  201. specify_cli/templates/tasks-template.md +161 -0
  202. specify_cli/templates/vscode-settings.json +13 -0
  203. specify_cli/text_sanitization.py +225 -0
  204. specify_cli/upgrade/__init__.py +18 -0
  205. specify_cli/upgrade/detector.py +239 -0
  206. specify_cli/upgrade/metadata.py +182 -0
  207. specify_cli/upgrade/migrations/__init__.py +65 -0
  208. specify_cli/upgrade/migrations/base.py +80 -0
  209. specify_cli/upgrade/migrations/m_0_10_0_python_only.py +359 -0
  210. specify_cli/upgrade/migrations/m_0_10_12_constitution_cleanup.py +99 -0
  211. specify_cli/upgrade/migrations/m_0_10_14_update_implement_slash_command.py +176 -0
  212. specify_cli/upgrade/migrations/m_0_10_1_populate_slash_commands.py +174 -0
  213. specify_cli/upgrade/migrations/m_0_10_2_update_slash_commands.py +172 -0
  214. specify_cli/upgrade/migrations/m_0_10_6_workflow_simplification.py +174 -0
  215. specify_cli/upgrade/migrations/m_0_10_8_fix_memory_structure.py +252 -0
  216. specify_cli/upgrade/migrations/m_0_10_9_repair_templates.py +168 -0
  217. specify_cli/upgrade/migrations/m_0_11_0_workspace_per_wp.py +182 -0
  218. specify_cli/upgrade/migrations/m_0_11_1_improved_workflow_templates.py +173 -0
  219. specify_cli/upgrade/migrations/m_0_11_1_update_implement_slash_command.py +160 -0
  220. specify_cli/upgrade/migrations/m_0_11_2_improved_workflow_templates.py +173 -0
  221. specify_cli/upgrade/migrations/m_0_11_3_workflow_agent_flag.py +114 -0
  222. specify_cli/upgrade/migrations/m_0_12_0_documentation_mission.py +155 -0
  223. specify_cli/upgrade/migrations/m_0_12_1_remove_kitty_specs_from_gitignore.py +183 -0
  224. specify_cli/upgrade/migrations/m_0_2_0_specify_to_kittify.py +80 -0
  225. specify_cli/upgrade/migrations/m_0_4_8_gitignore_agents.py +118 -0
  226. specify_cli/upgrade/migrations/m_0_5_0_encoding_hooks.py +141 -0
  227. specify_cli/upgrade/migrations/m_0_6_5_commands_rename.py +169 -0
  228. specify_cli/upgrade/migrations/m_0_6_7_ensure_missions.py +228 -0
  229. specify_cli/upgrade/migrations/m_0_7_2_worktree_commands_dedup.py +89 -0
  230. specify_cli/upgrade/migrations/m_0_7_3_update_scripts.py +114 -0
  231. specify_cli/upgrade/migrations/m_0_8_0_remove_active_mission.py +82 -0
  232. specify_cli/upgrade/migrations/m_0_8_0_worktree_agents_symlink.py +148 -0
  233. specify_cli/upgrade/migrations/m_0_9_0_frontmatter_only_lanes.py +346 -0
  234. specify_cli/upgrade/migrations/m_0_9_1_complete_lane_migration.py +656 -0
  235. specify_cli/upgrade/migrations/m_0_9_2_research_mission_templates.py +221 -0
  236. specify_cli/upgrade/registry.py +121 -0
  237. specify_cli/upgrade/runner.py +284 -0
  238. specify_cli/validators/__init__.py +14 -0
  239. specify_cli/validators/paths.py +154 -0
  240. specify_cli/validators/research.py +428 -0
  241. specify_cli/verify_enhanced.py +270 -0
  242. specify_cli/workspace_context.py +224 -0
@@ -0,0 +1,36 @@
1
+ """Dashboard HTML template loader."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import json
6
+ from pathlib import Path
7
+ from typing import Dict, Optional
8
+
9
+ __all__ = ["get_dashboard_html"]
10
+
11
+ _TEMPLATE_PATH = Path(__file__).with_name('index.html')
12
+ _DASHBOARD_HTML_CACHE: Optional[str] = None
13
+ _MISSION_PLACEHOLDER = "window.__INITIAL_MISSION__ = null;"
14
+
15
+
16
+ def _load_dashboard_template() -> str:
17
+ global _DASHBOARD_HTML_CACHE
18
+ if _DASHBOARD_HTML_CACHE is None:
19
+ try:
20
+ _DASHBOARD_HTML_CACHE = _TEMPLATE_PATH.read_text(encoding='utf-8')
21
+ except OSError as exc: # pragma: no cover - defensive
22
+ raise RuntimeError(f"Dashboard template missing at {_TEMPLATE_PATH}: {exc}") from exc
23
+ return _DASHBOARD_HTML_CACHE
24
+
25
+
26
+ def get_dashboard_html(*, mission_context: Optional[Dict[str, str]] = None) -> str:
27
+ """Return dashboard HTML with optional inline mission context."""
28
+ base_html = _load_dashboard_template()
29
+ if not mission_context:
30
+ return base_html
31
+
32
+ mission_json = json.dumps(mission_context)
33
+ if _MISSION_PLACEHOLDER not in base_html:
34
+ return base_html
35
+
36
+ return base_html.replace(_MISSION_PLACEHOLDER, f"window.__INITIAL_MISSION__ = {mission_json};", 1)
@@ -0,0 +1,258 @@
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
+ <title>Spec Kitty Dashboard</title>
7
+ <link rel="icon" type="image/png" href="/static/spec-kitty.png">
8
+ <script src="https://cdn.jsdelivr.net/npm/marked@11.1.1/marked.min.js"></script>
9
+ <link rel="stylesheet" href="/static/dashboard/dashboard.css">
10
+ <script>
11
+ window.__INITIAL_MISSION__ = null;
12
+ </script>
13
+ </head>
14
+ <body>
15
+ <div class="header">
16
+ <div class="header-left">
17
+ <div class="header-logo-wrapper">
18
+ <img src="/static/spec-kitty.png" alt="Spec Kitty logo" class="header-logo">
19
+ </div>
20
+ <div class="header-info">
21
+ <h1>Spec Kitty</h1>
22
+ <pre class="tree-view" id="tree-info">Loading…</pre>
23
+ </div>
24
+ <div class="feature-selector" id="feature-selector-container">
25
+ <label>Feature:</label>
26
+ <select id="feature-select" onchange="switchFeature(this.value)">
27
+ <option value="">Loading...</option>
28
+ </select>
29
+ </div>
30
+ <div id="single-feature-name" style="display: none; font-size: 1.2em; color: var(--grassy-green); font-weight: 600;"></div>
31
+ </div>
32
+ <div class="header-right">
33
+ <div class="mission-display" id="mission-display">
34
+ <span class="mission-label">Mission:</span>
35
+ <span class="mission-name" id="mission-name">Loading…</span>
36
+ </div>
37
+ </div>
38
+ </div>
39
+
40
+ <div class="container">
41
+ <div class="sidebar">
42
+ <div class="sidebar-item" data-page="constitution" onclick="switchPage('constitution')">
43
+ 📜 Constitution
44
+ </div>
45
+ <div class="last-update sidebar-last-update">Last updated: <span id="last-update">Loading...</span></div>
46
+ <div style="padding: 15px 30px; font-size: 0.75em; color: #9ca3af; text-transform: uppercase; letter-spacing: 1px; font-weight: 600;">
47
+ Workflow
48
+ </div>
49
+ <div class="sidebar-item active" data-page="overview" data-step="overview" onclick="switchPage('overview')">
50
+ <span id="icon-overview">📊</span> Overview
51
+ </div>
52
+ <div class="sidebar-item" data-page="spec" data-step="specify" onclick="switchPage('spec')">
53
+ <span id="icon-specify">⏳</span> Specify
54
+ </div>
55
+ <div class="sidebar-item" data-page="plan" data-step="plan" onclick="switchPage('plan')">
56
+ <span id="icon-plan">⏳</span> Plan
57
+ </div>
58
+ <div class="sidebar-item" data-page="tasks" data-step="tasks" onclick="switchPage('tasks')">
59
+ <span id="icon-tasks">⏳</span> Tasks
60
+ </div>
61
+ <div class="sidebar-item" data-page="kanban" data-step="implement" onclick="switchPage('kanban')">
62
+ <span id="icon-implement">⏳</span> Implement
63
+ </div>
64
+ <div style="padding: 15px 30px; margin-top: 20px; font-size: 0.75em; color: #9ca3af; text-transform: uppercase; letter-spacing: 1px; font-weight: 600;">
65
+ Artifacts
66
+ </div>
67
+ <div class="sidebar-item" data-page="research" onclick="switchPage('research')">
68
+ 🔬 Research
69
+ </div>
70
+ <div class="sidebar-item" data-page="contracts" onclick="switchPage('contracts')">
71
+ 📜 Contracts
72
+ </div>
73
+ <div class="sidebar-item" data-page="checklists" onclick="switchPage('checklists')">
74
+ ✅ Checklists
75
+ </div>
76
+ <div class="sidebar-item" data-page="quickstart" onclick="switchPage('quickstart')">
77
+ 🚀 Quickstart
78
+ </div>
79
+ <div class="sidebar-item" data-page="data-model" onclick="switchPage('data-model')">
80
+ 💾 Data Model
81
+ </div>
82
+ <div style="padding: 15px 30px; margin-top: 20px; font-size: 0.75em; color: #9ca3af; text-transform: uppercase; letter-spacing: 1px; font-weight: 600;">
83
+ System
84
+ </div>
85
+ <div class="sidebar-item" data-page="diagnostics" onclick="switchPage('diagnostics')">
86
+ 🔍 Diagnostics
87
+ </div>
88
+ </div>
89
+
90
+ <div class="main-content">
91
+ <div id="page-overview" class="page active">
92
+ <div class="content-card">
93
+ <h2>Feature Overview</h2>
94
+ <div id="overview-content"></div>
95
+ </div>
96
+ </div>
97
+
98
+ <div id="page-spec" class="page">
99
+ <div class="content-card">
100
+ <h2>Specification</h2>
101
+ <div id="spec-content" class="markdown-content"></div>
102
+ </div>
103
+ </div>
104
+
105
+ <div id="page-plan" class="page">
106
+ <div class="content-card">
107
+ <h2>Implementation Plan</h2>
108
+ <div id="plan-content" class="markdown-content"></div>
109
+ </div>
110
+ </div>
111
+
112
+ <div id="page-tasks" class="page">
113
+ <div class="content-card">
114
+ <h2>Task List</h2>
115
+ <div id="tasks-content" class="markdown-content"></div>
116
+ </div>
117
+ </div>
118
+
119
+ <div id="page-kanban" class="page">
120
+ <div class="content-card">
121
+ <h2>Kanban Board</h2>
122
+ <div id="kanban-status" class="status-summary"></div>
123
+ <div id="kanban-board" class="kanban-board"></div>
124
+ </div>
125
+ </div>
126
+
127
+ <div id="page-research" class="page">
128
+ <div class="content-card">
129
+ <h2>Research</h2>
130
+ <div id="research-content" class="markdown-content"></div>
131
+ </div>
132
+ </div>
133
+
134
+ <div id="page-contracts" class="page">
135
+ <div class="content-card">
136
+ <h2>Contracts</h2>
137
+ <div id="contracts-content" class="markdown-content"></div>
138
+ </div>
139
+ </div>
140
+
141
+ <div id="page-checklists" class="page">
142
+ <div class="content-card">
143
+ <h2>Checklists</h2>
144
+ <div id="checklists-content" class="markdown-content"></div>
145
+ </div>
146
+ </div>
147
+
148
+ <div id="page-quickstart" class="page">
149
+ <div class="content-card">
150
+ <h2>Quickstart Guide</h2>
151
+ <div id="quickstart-content" class="markdown-content"></div>
152
+ </div>
153
+ </div>
154
+
155
+ <div id="page-data-model" class="page">
156
+ <div class="content-card">
157
+ <h2>Data Model</h2>
158
+ <div id="data-model-content" class="markdown-content"></div>
159
+ </div>
160
+ </div>
161
+
162
+ <div id="page-constitution" class="page">
163
+ <div class="content-card">
164
+ <h2>📜 Project Constitution</h2>
165
+ <div id="constitution-content" class="markdown-content"></div>
166
+ </div>
167
+ </div>
168
+
169
+ <div id="page-diagnostics" class="page">
170
+ <div class="content-card">
171
+ <h2>🔍 Environment Diagnostics</h2>
172
+ <div id="diagnostics-loading" style="padding: 20px; text-align: center;">
173
+ <div style="font-size: 1.2em; color: var(--medium-text);">Loading diagnostics...</div>
174
+ </div>
175
+ <div id="diagnostics-content" style="display: none;">
176
+ <!-- Current Status -->
177
+ <div style="margin-bottom: 30px;">
178
+ <h3 style="color: var(--grassy-green); margin-bottom: 15px;">Current Status</h3>
179
+ <div id="diagnostics-status" style="background: var(--light-gray); padding: 15px; border-radius: 8px; font-family: monospace; font-size: 0.9em;"></div>
180
+ </div>
181
+
182
+ <!-- Issues & Recommendations -->
183
+ <div id="diagnostics-issues" style="margin-bottom: 30px; display: none;">
184
+ <h3 style="color: #ef4444; margin-bottom: 15px;">⚠️ Issues Detected</h3>
185
+ <div id="diagnostics-issues-content" style="background: #fef2f2; border-left: 4px solid #ef4444; padding: 15px; border-radius: 4px;"></div>
186
+ </div>
187
+
188
+ <div id="diagnostics-recommendations" style="margin-bottom: 30px; display: none;">
189
+ <h3 style="color: #f59e0b; margin-bottom: 15px;">💡 Recommendations</h3>
190
+ <div id="diagnostics-recommendations-content" style="background: #fffbeb; border-left: 4px solid #f59e0b; padding: 15px; border-radius: 4px;"></div>
191
+ </div>
192
+
193
+ <!-- Feature Analysis -->
194
+ <div style="margin-bottom: 30px;">
195
+ <h3 style="color: var(--grassy-green); margin-bottom: 15px;">Feature Analysis</h3>
196
+ <div id="diagnostics-features" style="display: flex; flex-direction: column; gap: 15px;"></div>
197
+ </div>
198
+
199
+ <!-- Actions -->
200
+ <div style="margin-top: 30px; padding-top: 20px; border-top: 1px solid var(--light-gray);">
201
+ <button onclick="refreshDiagnostics()" style="background: var(--grassy-green); color: white; padding: 10px 20px; border: none; border-radius: 6px; cursor: pointer; font-size: 1em;">
202
+ 🔄 Refresh Diagnostics
203
+ </button>
204
+ </div>
205
+ </div>
206
+ <div id="diagnostics-error" style="display: none; padding: 20px; background: #fef2f2; border-left: 4px solid #ef4444; border-radius: 4px;">
207
+ <strong>Error loading diagnostics:</strong> <span id="diagnostics-error-message"></span>
208
+ </div>
209
+ </div>
210
+ </div>
211
+
212
+ <div id="page-welcome" class="page">
213
+ <div class="content-card">
214
+ <h2>Welcome to Spec Kitty!</h2>
215
+ <div style="padding: 40px 20px; text-align: center;">
216
+ <p style="font-size: 1.2em; margin-bottom: 30px; color: var(--medium-text);">
217
+ Your project is initialized and the dashboard is ready.
218
+ </p>
219
+ <div style="background: var(--baby-blue); padding: 30px; border-radius: 12px; max-width: 600px; margin: 0 auto;">
220
+ <h3 style="color: var(--grassy-green); margin-bottom: 20px;">Get Started</h3>
221
+ <ol style="text-align: left; line-height: 2; color: var(--dark-text);">
222
+ <li>Run <code style="background: white; padding: 4px 8px; border-radius: 4px;">/spec-kitty.specify</code> to create your first feature</li>
223
+ <li>Then <code style="background: white; padding: 4px 8px; border-radius: 4px;">/spec-kitty.plan</code> to create the implementation plan</li>
224
+ <li>Then <code style="background: white; padding: 4px 8px; border-radius: 4px;">/spec-kitty.tasks</code> to generate the task breakdown</li>
225
+ <li>Watch the dashboard update in real-time as you work!</li>
226
+ </ol>
227
+ </div>
228
+ </div>
229
+ </div>
230
+ </div>
231
+
232
+ <div id="no-features-message" class="no-features" style="display: none;">
233
+ <h2>No Features Found</h2>
234
+ <p>Create your first feature using <code>/spec-kitty.specify</code></p>
235
+ </div>
236
+ </div>
237
+ </div>
238
+
239
+ <div id="prompt-modal" class="modal hidden" aria-hidden="true">
240
+ <div class="modal-overlay"></div>
241
+ <div class="modal-content" role="dialog" aria-modal="true" aria-labelledby="modal-title">
242
+ <div class="modal-header">
243
+ <div>
244
+ <div class="modal-title" id="modal-title">Work Package Prompt</div>
245
+ <div class="modal-subtitle" id="modal-subtitle"></div>
246
+ </div>
247
+ <button type="button" class="modal-close" id="modal-close-btn" aria-label="Close prompt viewer">✕</button>
248
+ </div>
249
+ <div class="modal-body" id="modal-body">
250
+ <div class="modal-meta" id="modal-prompt-meta"></div>
251
+ <div id="modal-prompt-content" class="markdown-content"></div>
252
+ </div>
253
+ </div>
254
+ </div>
255
+
256
+ <script src="/static/dashboard/dashboard.js"></script>
257
+ </body>
258
+ </html>