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,722 @@
1
+ :root {
2
+ --baby-blue: #A7C7E7;
3
+ --grassy-green: #7BB661;
4
+ --lavender: #C9A0DC;
5
+ --sunny-yellow: #FFF275;
6
+ --soft-peach: #FFD8B1;
7
+ --light-gray: #E8E8E8;
8
+ --creamy-white: #FFFDF7;
9
+ --dark-text: #2c3e50;
10
+ --medium-text: #546e7a;
11
+ }
12
+
13
+ * {
14
+ margin: 0;
15
+ padding: 0;
16
+ box-sizing: border-box;
17
+ }
18
+
19
+ body {
20
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
21
+ background: var(--baby-blue);
22
+ color: var(--dark-text);
23
+ min-height: 100vh;
24
+ display: flex;
25
+ flex-direction: column;
26
+ }
27
+
28
+ .header {
29
+ background: var(--creamy-white);
30
+ padding: 20px 30px;
31
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
32
+ display: flex;
33
+ justify-content: space-between;
34
+ align-items: center;
35
+ border-bottom: 3px solid var(--sunny-yellow);
36
+ }
37
+
38
+ .header-left {
39
+ display: flex;
40
+ align-items: center;
41
+ gap: 15px;
42
+ }
43
+
44
+ .header-right {
45
+ display: flex;
46
+ align-items: flex-start;
47
+ gap: 16px;
48
+ }
49
+
50
+ .mission-display {
51
+ font-size: 0.9em;
52
+ color: var(--medium-text);
53
+ }
54
+
55
+ .mission-label {
56
+ color: #6b7280;
57
+ margin-right: 6px;
58
+ }
59
+
60
+ .mission-name {
61
+ font-weight: 600;
62
+ color: var(--dark-text);
63
+ }
64
+
65
+ .header-logo-wrapper {
66
+ display: flex;
67
+ align-items: center;
68
+ justify-content: center;
69
+ width: 60px;
70
+ height: 60px;
71
+ background: white;
72
+ border-radius: 14px;
73
+ box-shadow: 0 4px 12px rgba(0,0,0,0.12);
74
+ border: 2px solid rgba(123, 182, 97, 0.25);
75
+ overflow: hidden;
76
+ }
77
+
78
+ .header-logo {
79
+ width: 100%;
80
+ height: 100%;
81
+ object-fit: contain;
82
+ }
83
+
84
+ .header h1 {
85
+ font-size: 1.8em;
86
+ color: var(--grassy-green);
87
+ margin: 0;
88
+ text-shadow: 1px 1px 2px rgba(0,0,0,0.1);
89
+ }
90
+
91
+ .header-info {
92
+ display: flex;
93
+ flex-direction: column;
94
+ gap: 6px;
95
+ }
96
+
97
+ .tree-view {
98
+ font-size: 0.75em;
99
+ color: var(--medium-text);
100
+ font-family: 'Monaco', 'Menlo', monospace;
101
+ background: rgba(0,0,0,0.05);
102
+ padding: 6px 10px;
103
+ border-radius: 6px;
104
+ white-space: pre;
105
+ line-height: 1.4;
106
+ }
107
+
108
+ .feature-selector {
109
+ min-width: 300px;
110
+ }
111
+
112
+ .feature-selector label {
113
+ display: block;
114
+ font-size: 0.85em;
115
+ color: #6b7280;
116
+ margin-bottom: 5px;
117
+ font-weight: 500;
118
+ }
119
+
120
+ .feature-selector select {
121
+ width: 100%;
122
+ padding: 10px 15px;
123
+ border: 2px solid var(--lavender);
124
+ border-radius: 8px;
125
+ font-size: 1em;
126
+ background: var(--creamy-white);
127
+ color: var(--dark-text);
128
+ cursor: pointer;
129
+ transition: all 0.2s;
130
+ }
131
+
132
+ .feature-selector select:hover {
133
+ border-color: var(--grassy-green);
134
+ background: white;
135
+ }
136
+
137
+ .feature-selector select:focus {
138
+ outline: none;
139
+ border-color: var(--grassy-green);
140
+ box-shadow: 0 0 0 3px rgba(123, 182, 97, 0.2);
141
+ }
142
+
143
+ .last-update {
144
+ font-size: 0.85em;
145
+ color: var(--medium-text);
146
+ }
147
+
148
+ .sidebar-last-update {
149
+ margin: 6px 30px 20px;
150
+ display: block;
151
+ }
152
+
153
+ .container {
154
+ display: flex;
155
+ flex: 1;
156
+ overflow: hidden;
157
+ }
158
+
159
+ .sidebar {
160
+ width: 250px;
161
+ background: var(--creamy-white);
162
+ padding: 20px 0;
163
+ box-shadow: 2px 0 10px rgba(0,0,0,0.1);
164
+ overflow-y: auto;
165
+ border-right: 2px solid var(--light-gray);
166
+ }
167
+
168
+ .sidebar-item {
169
+ padding: 12px 30px;
170
+ cursor: pointer;
171
+ transition: all 0.2s;
172
+ border-left: 4px solid transparent;
173
+ display: flex;
174
+ align-items: center;
175
+ gap: 10px;
176
+ color: var(--dark-text);
177
+ }
178
+
179
+ .sidebar-item:hover {
180
+ background: rgba(201, 160, 220, 0.15);
181
+ color: var(--grassy-green);
182
+ }
183
+
184
+ .sidebar-item.active {
185
+ background: rgba(123, 182, 97, 0.1);
186
+ border-left-color: var(--grassy-green);
187
+ color: var(--grassy-green);
188
+ font-weight: 600;
189
+ }
190
+
191
+ .sidebar-item.disabled {
192
+ opacity: 0.4;
193
+ cursor: not-allowed;
194
+ }
195
+
196
+ .sidebar-item.disabled:hover {
197
+ background: transparent;
198
+ color: #4b5563;
199
+ }
200
+
201
+ .main-content {
202
+ flex: 1;
203
+ padding: 30px;
204
+ overflow-y: auto;
205
+ }
206
+
207
+ .page {
208
+ display: none;
209
+ }
210
+
211
+ .page.active {
212
+ display: block;
213
+ }
214
+
215
+ .content-card {
216
+ background: var(--creamy-white);
217
+ border-radius: 12px;
218
+ padding: 30px;
219
+ box-shadow: 0 4px 6px rgba(0,0,0,0.1);
220
+ margin-bottom: 20px;
221
+ border-top: 3px solid var(--sunny-yellow);
222
+ }
223
+
224
+ .content-card h2 {
225
+ color: var(--grassy-green);
226
+ margin-bottom: 20px;
227
+ padding-bottom: 10px;
228
+ border-bottom: 2px solid var(--soft-peach);
229
+ }
230
+
231
+ .markdown-content {
232
+ line-height: 1.6;
233
+ color: #374151;
234
+ }
235
+
236
+ .markdown-content h1, .markdown-content h2, .markdown-content h3 {
237
+ margin-top: 24px;
238
+ margin-bottom: 12px;
239
+ color: #1f2937;
240
+ }
241
+
242
+ .markdown-content p {
243
+ margin-bottom: 12px;
244
+ }
245
+
246
+ .markdown-content code {
247
+ background: #f3f4f6;
248
+ padding: 2px 6px;
249
+ border-radius: 4px;
250
+ font-family: 'Monaco', 'Menlo', monospace;
251
+ font-size: 0.9em;
252
+ }
253
+
254
+ .markdown-content pre {
255
+ background: #ffffff;
256
+ color: #111827;
257
+ padding: 16px;
258
+ border-radius: 8px;
259
+ overflow-x: auto;
260
+ margin: 16px 0;
261
+ }
262
+
263
+ .markdown-content pre code {
264
+ background: transparent;
265
+ color: inherit;
266
+ padding: 0;
267
+ }
268
+
269
+ .markdown-content ul, .markdown-content ol {
270
+ margin-left: 24px;
271
+ margin-bottom: 12px;
272
+ }
273
+
274
+ /* Status summary styles */
275
+ .status-summary {
276
+ display: grid;
277
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
278
+ gap: 15px;
279
+ margin-bottom: 25px;
280
+ }
281
+
282
+ .status-card {
283
+ background: linear-gradient(135deg, var(--creamy-white) 0%, #fafaf8 100%);
284
+ padding: 20px;
285
+ border-radius: 8px;
286
+ border-left: 4px solid;
287
+ }
288
+
289
+ .status-card.total { border-left-color: var(--baby-blue); }
290
+ .status-card.progress { border-left-color: var(--sunny-yellow); }
291
+ .status-card.review { border-left-color: var(--lavender); }
292
+ .status-card.completed { border-left-color: var(--grassy-green); }
293
+ .status-card.agents { border-left-color: var(--soft-peach); }
294
+
295
+ .merge-badge {
296
+ display: inline-flex;
297
+ align-items: center;
298
+ gap: 6px;
299
+ padding: 6px 12px;
300
+ border-radius: 999px;
301
+ font-size: 0.85em;
302
+ font-weight: 600;
303
+ color: #065f46;
304
+ background: #d1fae5;
305
+ border: 1px solid #34d399;
306
+ margin-left: 12px;
307
+ white-space: nowrap;
308
+ }
309
+
310
+ .merge-badge .icon {
311
+ font-size: 1em;
312
+ }
313
+
314
+ .status-label {
315
+ font-size: 0.85em;
316
+ color: #6b7280;
317
+ font-weight: 500;
318
+ margin-bottom: 8px;
319
+ text-transform: uppercase;
320
+ letter-spacing: 0.5px;
321
+ }
322
+
323
+ .status-value {
324
+ font-size: 2.5em;
325
+ font-weight: 700;
326
+ color: #1f2937;
327
+ line-height: 1;
328
+ }
329
+
330
+ .status-detail {
331
+ font-size: 0.85em;
332
+ color: #9ca3af;
333
+ margin-top: 6px;
334
+ }
335
+
336
+ .progress-bar {
337
+ width: 100%;
338
+ height: 6px;
339
+ background: #e5e7eb;
340
+ border-radius: 3px;
341
+ margin-top: 10px;
342
+ overflow: hidden;
343
+ }
344
+
345
+ .progress-fill {
346
+ height: 100%;
347
+ background: linear-gradient(90deg, var(--grassy-green) 0%, #5a9647 100%);
348
+ transition: width 0.3s ease;
349
+ }
350
+
351
+ /* Kanban board styles */
352
+ .kanban-board {
353
+ display: grid;
354
+ grid-template-columns: repeat(4, 1fr);
355
+ gap: 20px;
356
+ }
357
+
358
+ .lane {
359
+ background: var(--creamy-white);
360
+ border-radius: 12px;
361
+ padding: 20px;
362
+ box-shadow: 0 2px 4px rgba(0,0,0,0.1);
363
+ min-height: 400px;
364
+ border-top: 3px solid;
365
+ }
366
+
367
+ .lane-header {
368
+ font-size: 1.2em;
369
+ font-weight: 600;
370
+ margin-bottom: 15px;
371
+ padding-bottom: 10px;
372
+ border-bottom: 2px solid;
373
+ display: flex;
374
+ justify-content: space-between;
375
+ align-items: center;
376
+ }
377
+
378
+ .lane-header .count {
379
+ font-size: 0.8em;
380
+ background: rgba(0,0,0,0.08);
381
+ padding: 4px 10px;
382
+ border-radius: 12px;
383
+ }
384
+
385
+ .lane.planned { border-top-color: var(--baby-blue); }
386
+ .lane.planned .lane-header { border-color: var(--baby-blue); color: var(--baby-blue); }
387
+
388
+ .lane.doing { border-top-color: var(--sunny-yellow); }
389
+ .lane.doing .lane-header { border-color: var(--sunny-yellow); color: #d4a800; }
390
+
391
+ .lane.for_review { border-top-color: var(--lavender); }
392
+ .lane.for_review .lane-header { border-color: var(--lavender); color: var(--lavender); }
393
+
394
+ .lane.done { border-top-color: var(--grassy-green); }
395
+ .lane.done .lane-header { border-color: var(--grassy-green); color: var(--grassy-green); }
396
+
397
+ .card {
398
+ background: white;
399
+ border-radius: 8px;
400
+ padding: 15px;
401
+ margin-bottom: 12px;
402
+ box-shadow: 0 2px 4px rgba(0,0,0,0.08);
403
+ border-left: 4px solid;
404
+ transition: transform 0.2s, box-shadow 0.2s;
405
+ }
406
+
407
+ .card:hover {
408
+ transform: translateY(-2px);
409
+ box-shadow: 0 4px 8px rgba(0,0,0,0.15);
410
+ background: var(--creamy-white);
411
+ }
412
+
413
+ .lane.planned .card { border-left-color: var(--baby-blue); }
414
+ .lane.doing .card { border-left-color: var(--sunny-yellow); }
415
+ .lane.for_review .card { border-left-color: var(--lavender); }
416
+ .lane.done .card { border-left-color: var(--grassy-green); }
417
+
418
+ .card-id {
419
+ font-weight: 600;
420
+ color: #6b7280;
421
+ font-size: 0.85em;
422
+ margin-bottom: 5px;
423
+ }
424
+
425
+ .card-title {
426
+ font-size: 1.05em;
427
+ font-weight: 500;
428
+ margin-bottom: 8px;
429
+ color: #1f2937;
430
+ line-height: 1.4;
431
+ }
432
+
433
+ .card-meta {
434
+ display: flex;
435
+ flex-wrap: wrap;
436
+ gap: 6px;
437
+ margin-top: 10px;
438
+ }
439
+
440
+ .badge {
441
+ display: inline-block;
442
+ padding: 3px 8px;
443
+ border-radius: 4px;
444
+ font-size: 0.75em;
445
+ font-weight: 500;
446
+ }
447
+
448
+ .badge.agent {
449
+ background: var(--soft-peach);
450
+ color: #8b5a00;
451
+ }
452
+
453
+ .badge.subtasks {
454
+ background: var(--lavender);
455
+ color: #5a3a6e;
456
+ }
457
+
458
+ .empty-state {
459
+ text-align: center;
460
+ color: #9ca3af;
461
+ padding: 40px 20px;
462
+ font-style: italic;
463
+ }
464
+
465
+ body.modal-open {
466
+ overflow: hidden;
467
+ }
468
+
469
+ .modal {
470
+ position: fixed;
471
+ inset: 0;
472
+ display: none;
473
+ align-items: center;
474
+ justify-content: center;
475
+ z-index: 1000;
476
+ }
477
+
478
+ .modal.show {
479
+ display: flex;
480
+ }
481
+
482
+ .modal.hidden {
483
+ display: none;
484
+ }
485
+
486
+ .modal-overlay {
487
+ position: absolute;
488
+ inset: 0;
489
+ background: rgba(17, 24, 39, 0.65);
490
+ backdrop-filter: blur(2px);
491
+ }
492
+
493
+ .modal-content {
494
+ position: relative;
495
+ background: white;
496
+ border-radius: 12px;
497
+ padding: 24px;
498
+ max-width: 900px;
499
+ width: min(90%, 900px);
500
+ max-height: 80vh;
501
+ display: flex;
502
+ flex-direction: column;
503
+ gap: 16px;
504
+ box-shadow: 0 20px 40px rgba(15, 23, 42, 0.35);
505
+ overflow: hidden;
506
+ }
507
+
508
+ .modal-header {
509
+ display: flex;
510
+ justify-content: space-between;
511
+ align-items: flex-start;
512
+ gap: 16px;
513
+ }
514
+
515
+ .modal-title {
516
+ font-size: 1.35em;
517
+ font-weight: 600;
518
+ color: #1f2937;
519
+ }
520
+
521
+ .modal-subtitle {
522
+ font-size: 0.9em;
523
+ color: #6b7280;
524
+ margin-top: 4px;
525
+ }
526
+
527
+ .modal-close {
528
+ border: none;
529
+ background: transparent;
530
+ color: #6b7280;
531
+ font-size: 1.2em;
532
+ cursor: pointer;
533
+ transition: color 0.2s ease;
534
+ }
535
+
536
+ .modal-close:hover,
537
+ .modal-close:focus {
538
+ color: #1f2937;
539
+ }
540
+
541
+ .modal-body {
542
+ position: relative;
543
+ overflow-y: auto;
544
+ padding-right: 4px;
545
+ }
546
+
547
+ .modal-meta {
548
+ display: flex;
549
+ flex-wrap: wrap;
550
+ gap: 8px;
551
+ margin-bottom: 12px;
552
+ }
553
+
554
+ .modal-meta span {
555
+ background: #f3f4f6;
556
+ border-radius: 12px;
557
+ padding: 4px 12px;
558
+ font-size: 0.85em;
559
+ color: #4b5563;
560
+ }
561
+
562
+ .modal-content .markdown-content {
563
+ padding: 0;
564
+ }
565
+
566
+ .modal-content .markdown-content pre {
567
+ background: #ffffff;
568
+ color: #111827;
569
+ }
570
+
571
+ .no-features {
572
+ text-align: center;
573
+ padding: 60px 40px;
574
+ }
575
+
576
+ .no-features h2 {
577
+ color: white;
578
+ margin-bottom: 15px;
579
+ }
580
+
581
+ .no-features p {
582
+ color: rgba(255, 255, 255, 0.8);
583
+ line-height: 1.6;
584
+ }
585
+
586
+ @media (max-width: 1400px) {
587
+ .kanban-board {
588
+ grid-template-columns: repeat(2, 1fr);
589
+ }
590
+ }
591
+
592
+ /* Markdown content styling */
593
+ .markdown-content h1,
594
+ .markdown-content h2,
595
+ .markdown-content h3,
596
+ .markdown-content h4,
597
+ .markdown-content h5,
598
+ .markdown-content h6 {
599
+ margin-top: 1.5em;
600
+ margin-bottom: 0.5em;
601
+ font-weight: 600;
602
+ color: var(--dark-text);
603
+ }
604
+
605
+ .markdown-content h1:first-child,
606
+ .markdown-content h2:first-child,
607
+ .markdown-content h3:first-child {
608
+ margin-top: 0;
609
+ }
610
+
611
+ .markdown-content h1 { font-size: 1.8em; }
612
+ .markdown-content h2 { font-size: 1.5em; }
613
+ .markdown-content h3 { font-size: 1.3em; }
614
+ .markdown-content h4 { font-size: 1.1em; }
615
+
616
+ .markdown-content p {
617
+ margin-bottom: 1em;
618
+ line-height: 1.6;
619
+ }
620
+
621
+ .markdown-content ul,
622
+ .markdown-content ol {
623
+ margin-bottom: 1em;
624
+ padding-left: 2em;
625
+ }
626
+
627
+ .markdown-content li {
628
+ margin-bottom: 0.3em;
629
+ line-height: 1.6;
630
+ }
631
+
632
+ .markdown-content blockquote {
633
+ border-left: 4px solid var(--lavender);
634
+ padding-left: 1em;
635
+ margin: 1em 0;
636
+ color: var(--medium-text);
637
+ background: #f9f9f9;
638
+ padding: 10px 15px;
639
+ border-radius: 4px;
640
+ }
641
+
642
+ .markdown-content code {
643
+ background: #f4f4f4;
644
+ padding: 2px 6px;
645
+ border-radius: 3px;
646
+ font-family: 'Monaco', 'Menlo', 'Courier New', monospace;
647
+ font-size: 0.9em;
648
+ color: #c7254e;
649
+ }
650
+
651
+ .markdown-content pre {
652
+ background: #f8f9fa;
653
+ padding: 15px;
654
+ border-radius: 8px;
655
+ overflow-x: auto;
656
+ border: 1px solid #dee2e6;
657
+ margin-bottom: 1em;
658
+ }
659
+
660
+ .markdown-content pre code {
661
+ background: none;
662
+ padding: 0;
663
+ color: #212529;
664
+ }
665
+
666
+ .markdown-content table {
667
+ width: 100%;
668
+ border-collapse: collapse;
669
+ margin: 1em 0;
670
+ }
671
+
672
+ .markdown-content table th {
673
+ background: var(--baby-blue);
674
+ padding: 10px;
675
+ text-align: left;
676
+ font-weight: 600;
677
+ border: 1px solid #ddd;
678
+ }
679
+
680
+ .markdown-content table td {
681
+ padding: 10px;
682
+ border: 1px solid #ddd;
683
+ }
684
+
685
+ .markdown-content table tr:nth-child(even) {
686
+ background: #f9f9f9;
687
+ }
688
+
689
+ .markdown-content hr {
690
+ border: none;
691
+ border-top: 2px solid var(--light-gray);
692
+ margin: 2em 0;
693
+ }
694
+
695
+ .markdown-content a {
696
+ color: var(--grassy-green);
697
+ text-decoration: none;
698
+ }
699
+
700
+ .markdown-content a:hover {
701
+ text-decoration: underline;
702
+ }
703
+
704
+ .markdown-content img {
705
+ max-width: 100%;
706
+ height: auto;
707
+ display: block;
708
+ margin: 1em 0;
709
+ }
710
+
711
+ /* Media Queries */
712
+ @media (max-width: 768px) {
713
+ .container {
714
+ flex-direction: column;
715
+ }
716
+ .sidebar {
717
+ width: 100%;
718
+ }
719
+ .kanban-board {
720
+ grid-template-columns: 1fr;
721
+ }
722
+ }