x-ipe 1.0.24__py3-none-any.whl → 1.0.25__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 (139) hide show
  1. x_ipe/app.py +25 -3
  2. x_ipe/handlers/terminal_handlers.py +6 -0
  3. x_ipe/handlers/voice_handlers.py +5 -0
  4. x_ipe/resources/copilot-instructions.md +19 -6
  5. x_ipe/resources/skills/lesson-learned/SKILL.md +208 -0
  6. x_ipe/resources/skills/lesson-learned/references/examples.md +238 -0
  7. x_ipe/resources/skills/project-quality-board-management/SKILL.md +135 -298
  8. x_ipe/resources/skills/project-quality-board-management/references/evaluation-principles.md +213 -0
  9. x_ipe/resources/skills/project-quality-board-management/references/evaluation-procedures.md +214 -0
  10. x_ipe/resources/skills/project-quality-board-management/templates/quality-report.md +70 -18
  11. x_ipe/resources/skills/task-execution-guideline/SKILL.md +2 -2
  12. x_ipe/resources/skills/task-execution-guideline/templates/task-record.yaml +1 -1
  13. x_ipe/resources/skills/task-type-code-implementation/SKILL.md +72 -270
  14. x_ipe/resources/skills/task-type-code-implementation/references/implementation-guidelines.md +432 -0
  15. x_ipe/resources/skills/task-type-code-refactor-v2/SKILL.md +127 -353
  16. x_ipe/resources/skills/task-type-code-refactor-v2/references/refactoring-techniques.md +373 -0
  17. x_ipe/resources/skills/task-type-feature-breakdown/SKILL.md +31 -243
  18. x_ipe/resources/skills/task-type-feature-breakdown/references/breakdown-guidelines.md +330 -0
  19. x_ipe/resources/skills/task-type-feature-refinement/SKILL.md +27 -180
  20. x_ipe/resources/skills/task-type-feature-refinement/references/specification-writing-guide.md +267 -0
  21. x_ipe/resources/skills/task-type-idea-mockup/SKILL.md +38 -276
  22. x_ipe/resources/skills/task-type-idea-mockup/references/mockup-guidelines.md +299 -0
  23. x_ipe/resources/skills/task-type-idea-to-architecture/SKILL.md +20 -218
  24. x_ipe/resources/skills/task-type-idea-to-architecture/references/architecture-patterns.md +342 -0
  25. x_ipe/resources/skills/task-type-ideation/SKILL.md +10 -266
  26. x_ipe/resources/skills/task-type-ideation/references/folder-naming-guide.md +55 -0
  27. x_ipe/resources/skills/task-type-ideation/references/tool-usage-guide.md +236 -0
  28. x_ipe/resources/skills/task-type-ideation-v2/SKILL.md +488 -0
  29. x_ipe/resources/skills/task-type-ideation-v2/references/examples.md +377 -0
  30. x_ipe/resources/skills/task-type-ideation-v2/references/folder-naming-guide.md +74 -0
  31. x_ipe/resources/skills/task-type-ideation-v2/references/tool-usage-guide.md +145 -0
  32. x_ipe/resources/skills/task-type-ideation-v2/references/visualization-guide.md +160 -0
  33. x_ipe/resources/skills/task-type-ideation-v2/templates/idea-summary.md +86 -0
  34. x_ipe/resources/skills/task-type-refactoring-analysis/SKILL.md +83 -145
  35. x_ipe/resources/skills/task-type-refactoring-analysis/references/output-schema.md +172 -0
  36. x_ipe/resources/skills/task-type-technical-design/SKILL.md +28 -214
  37. x_ipe/resources/skills/task-type-technical-design/references/design-templates.md +422 -0
  38. x_ipe/resources/skills/task-type-test-generation/SKILL.md +47 -332
  39. x_ipe/resources/skills/task-type-test-generation/references/test-patterns.md +368 -0
  40. x_ipe/resources/skills/tool-tracing-creator/SKILL.md +312 -0
  41. x_ipe/resources/skills/tool-tracing-creator/references/examples.md +324 -0
  42. x_ipe/resources/skills/tool-tracing-instrumentation/SKILL.md +373 -0
  43. x_ipe/resources/skills/tool-tracing-instrumentation/references/examples.md +264 -0
  44. x_ipe/resources/skills/x-ipe-skill-creator-v3/SKILL.md +486 -0
  45. x_ipe/resources/skills/x-ipe-skill-creator-v3/references/10. example-gate-conditions.md +73 -0
  46. x_ipe/resources/skills/x-ipe-skill-creator-v3/references/11. reference-quality-standards.md +127 -0
  47. x_ipe/resources/skills/x-ipe-skill-creator-v3/references/2. reference-section-order.md +127 -0
  48. x_ipe/resources/skills/x-ipe-skill-creator-v3/references/3. example-step-based-code-review.md +84 -0
  49. x_ipe/resources/skills/x-ipe-skill-creator-v3/references/4. example-step-based-feature-implementation.md +113 -0
  50. x_ipe/resources/skills/x-ipe-skill-creator-v3/references/5. example-function-based-validation.md +73 -0
  51. x_ipe/resources/skills/x-ipe-skill-creator-v3/references/6. example-function-based-analysis.md +94 -0
  52. x_ipe/resources/skills/x-ipe-skill-creator-v3/references/7. example-task-io-code-implementation.md +36 -0
  53. x_ipe/resources/skills/x-ipe-skill-creator-v3/references/8. example-structured-summary.md +43 -0
  54. x_ipe/resources/skills/x-ipe-skill-creator-v3/references/9. example-dor-dod.md +77 -0
  55. x_ipe/resources/skills/x-ipe-skill-creator-v3/references/examples.md +429 -0
  56. x_ipe/resources/skills/x-ipe-skill-creator-v3/references/skill-general-guidelines-v2.md +611 -0
  57. x_ipe/resources/skills/x-ipe-skill-creator-v3/templates/skill-meta-x-ipe-meta.md +153 -0
  58. x_ipe/resources/skills/x-ipe-skill-creator-v3/templates/skill-meta-x-ipe-task-based.md +324 -0
  59. x_ipe/resources/skills/x-ipe-skill-creator-v3/templates/skill-meta-x-ipe-task-category.md +109 -0
  60. x_ipe/resources/skills/x-ipe-skill-creator-v3/templates/skill-meta-x-ipe-tool.md +205 -0
  61. x_ipe/resources/skills/x-ipe-skill-creator-v3/templates/x-ipe-meta.md +334 -0
  62. x_ipe/resources/skills/x-ipe-skill-creator-v3/templates/x-ipe-task-based.md +279 -0
  63. x_ipe/resources/skills/x-ipe-skill-creator-v3/templates/x-ipe-tool.md +175 -0
  64. x_ipe/resources/skills/x-ipe-skill-creator-v3/templates/x-ipe-workflow-orchestration.md +329 -0
  65. x_ipe/resources/skills/x-ipe-task-based-ideation/SKILL.md +487 -0
  66. x_ipe/resources/skills/x-ipe-task-based-ideation/references/examples.md +377 -0
  67. x_ipe/resources/skills/x-ipe-task-based-ideation/references/folder-naming-guide.md +74 -0
  68. x_ipe/resources/skills/x-ipe-task-based-ideation/references/tool-usage-guide.md +145 -0
  69. x_ipe/resources/skills/x-ipe-task-based-ideation/references/visualization-guide.md +160 -0
  70. x_ipe/resources/skills/x-ipe-task-based-ideation/templates/idea-summary.md +86 -0
  71. x_ipe/routes/__init__.py +2 -0
  72. x_ipe/routes/ideas_routes.py +17 -0
  73. x_ipe/routes/kb_routes.py +80 -0
  74. x_ipe/routes/main_routes.py +18 -0
  75. x_ipe/routes/project_routes.py +7 -0
  76. x_ipe/routes/proxy_routes.py +2 -0
  77. x_ipe/routes/quality_evaluation_routes.py +193 -0
  78. x_ipe/routes/settings_routes.py +6 -0
  79. x_ipe/routes/tools_routes.py +6 -0
  80. x_ipe/routes/tracing_routes.py +232 -0
  81. x_ipe/routes/uiux_feedback_routes.py +30 -0
  82. x_ipe/services/__init__.py +5 -0
  83. x_ipe/services/config_service.py +6 -0
  84. x_ipe/services/file_service.py +20 -0
  85. x_ipe/services/homepage_service.py +160 -0
  86. x_ipe/services/ideas_service.py +19 -0
  87. x_ipe/services/kb_service.py +378 -0
  88. x_ipe/services/proxy_service.py +4 -0
  89. x_ipe/services/settings_service.py +13 -0
  90. x_ipe/services/skills_service.py +4 -0
  91. x_ipe/services/terminal_service.py +24 -0
  92. x_ipe/services/themes_service.py +4 -0
  93. x_ipe/services/tools_config_service.py +4 -0
  94. x_ipe/services/tracing_service.py +333 -0
  95. x_ipe/services/uiux_feedback_service.py +32 -0
  96. x_ipe/services/voice_input_service_v2.py +11 -0
  97. x_ipe/static/css/base.css +7 -0
  98. x_ipe/static/css/homepage-infinity.css +330 -0
  99. x_ipe/static/css/kb-core.css +301 -0
  100. x_ipe/static/css/quality-evaluation.css +345 -0
  101. x_ipe/static/css/sidebar.css +14 -4
  102. x_ipe/static/css/terminal.css +1 -0
  103. x_ipe/static/css/tracing-dashboard.css +796 -0
  104. x_ipe/static/css/workplace.css +20 -0
  105. x_ipe/static/img/homepage-infinity-loop.png +0 -0
  106. x_ipe/static/js/features/homepage-infinity.js +314 -0
  107. x_ipe/static/js/features/kb-core.js +371 -0
  108. x_ipe/static/js/features/quality-evaluation.js +387 -0
  109. x_ipe/static/js/features/sidebar.js +255 -12
  110. x_ipe/static/js/features/tracing-dashboard.js +855 -0
  111. x_ipe/static/js/features/tracing-graph.js +1031 -0
  112. x_ipe/static/js/features/tree-search.js +6 -2
  113. x_ipe/static/js/features/workplace.js +200 -6
  114. x_ipe/static/js/init.js +76 -0
  115. x_ipe/static/js/uiux-feedback.js +18 -2
  116. x_ipe/templates/base.html +19 -0
  117. x_ipe/templates/index.html +7 -1
  118. x_ipe/templates/knowledge-base.html +110 -0
  119. x_ipe/templates/workplace.html +4 -0
  120. x_ipe/tracing/__init__.py +37 -0
  121. x_ipe/tracing/buffer.py +135 -0
  122. x_ipe/tracing/context.py +125 -0
  123. x_ipe/tracing/decorator.py +288 -0
  124. x_ipe/tracing/middleware.py +197 -0
  125. x_ipe/tracing/parser.py +235 -0
  126. x_ipe/tracing/redactor.py +111 -0
  127. x_ipe/tracing/writer.py +122 -0
  128. {x_ipe-1.0.24.dist-info → x_ipe-1.0.25.dist-info}/METADATA +2 -2
  129. {x_ipe-1.0.24.dist-info → x_ipe-1.0.25.dist-info}/RECORD +132 -62
  130. x_ipe/resources/skills/x-ipe-skill-creator/SKILL.md +0 -329
  131. x_ipe/resources/skills/x-ipe-skill-creator/references/output-patterns.md +0 -169
  132. x_ipe/resources/skills/x-ipe-skill-creator/references/skill-structure.md +0 -162
  133. x_ipe/resources/skills/x-ipe-skill-creator/references/workflows.md +0 -110
  134. x_ipe/resources/skills/x-ipe-skill-creator/templates/references/examples.md +0 -113
  135. x_ipe/resources/skills/x-ipe-skill-creator/templates/skill-category-skill.md +0 -296
  136. x_ipe/resources/skills/x-ipe-skill-creator/templates/task-type-skill.md +0 -269
  137. {x_ipe-1.0.24.dist-info → x_ipe-1.0.25.dist-info}/WHEEL +0 -0
  138. {x_ipe-1.0.24.dist-info → x_ipe-1.0.25.dist-info}/entry_points.txt +0 -0
  139. {x_ipe-1.0.24.dist-info → x_ipe-1.0.25.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,330 @@
1
+ /**
2
+ * Homepage Infinity Loop Styles - FEATURE-026
3
+ */
4
+
5
+ /* Container - transparent background to match mockup */
6
+ .homepage-infinity-container {
7
+ display: flex;
8
+ flex-direction: column;
9
+ align-items: center;
10
+ justify-content: center;
11
+ min-height: 100%;
12
+ padding: 2rem;
13
+ background: transparent;
14
+ color: var(--bs-body-color, #212529);
15
+ }
16
+
17
+ /* Header */
18
+ .homepage-header {
19
+ text-align: center;
20
+ margin-bottom: 2rem;
21
+ }
22
+
23
+ .homepage-header h1 {
24
+ font-size: 3rem;
25
+ font-weight: 700;
26
+ background: linear-gradient(135deg, #4facfe, #a855f7);
27
+ -webkit-background-clip: text;
28
+ -webkit-text-fill-color: transparent;
29
+ background-clip: text;
30
+ margin: 0 0 0.5rem 0;
31
+ }
32
+
33
+ .homepage-header p {
34
+ font-size: 1.25rem;
35
+ color: var(--bs-secondary-color, #6c757d);
36
+ margin: 0;
37
+ }
38
+
39
+ /* Infinity Loop Container */
40
+ .infinity-loop-container {
41
+ position: relative;
42
+ width: 100%;
43
+ max-width: 900px;
44
+ aspect-ratio: 16 / 9;
45
+ }
46
+
47
+ .infinity-loop {
48
+ position: relative;
49
+ width: 100%;
50
+ height: 100%;
51
+ }
52
+
53
+ .infinity-bg {
54
+ width: 100%;
55
+ height: 100%;
56
+ object-fit: contain;
57
+ opacity: 0.9;
58
+ }
59
+
60
+ /* Loop Labels */
61
+ .loop-label {
62
+ position: absolute;
63
+ font-size: 1.2rem;
64
+ font-weight: 700;
65
+ letter-spacing: 0.1em;
66
+ text-transform: uppercase;
67
+ text-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
68
+ }
69
+
70
+ .loop-label.control {
71
+ left: 19%;
72
+ top: 49%;
73
+ color: #00c6fb;
74
+ }
75
+
76
+ .loop-label.transparency {
77
+ left: 64%;
78
+ top: 49%;
79
+ color: #a855f7;
80
+ }
81
+
82
+ /* Stage Buttons - Circular like mockup */
83
+ .stage-btn {
84
+ position: absolute;
85
+ display: flex;
86
+ flex-direction: column;
87
+ align-items: center;
88
+ justify-content: center;
89
+ width: 80px;
90
+ height: 80px;
91
+ border: none;
92
+ border-radius: 50%;
93
+ cursor: pointer;
94
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
95
+ transform: translate(-50%, -50%);
96
+ box-shadow:
97
+ 0 4px 20px rgba(0, 0, 0, 0.15),
98
+ 0 2px 8px rgba(0, 0, 0, 0.1);
99
+ z-index: 10;
100
+ }
101
+
102
+ /* Individual button colors - customized */
103
+ .stage-btn[data-stage="ideation"] {
104
+ background: rgb(123, 68, 174);
105
+ color: #fff;
106
+ }
107
+
108
+ .stage-btn[data-stage="requirement"] {
109
+ background: rgb(165, 87, 194);
110
+ color: #fff;
111
+ }
112
+
113
+ .stage-btn[data-stage="implementation"] {
114
+ background: rgb(110, 99, 206);
115
+ color: #fff;
116
+ }
117
+
118
+ .stage-btn[data-stage="deployment"] {
119
+ background: rgb(67, 161, 231);
120
+ color: #fff;
121
+ }
122
+
123
+ .stage-btn[data-stage="validation"] {
124
+ background: rgb(66, 112, 203);
125
+ color: #fff;
126
+ }
127
+
128
+ .stage-btn[data-stage="monitoring"] {
129
+ background: rgb(62, 157, 226);
130
+ color: #fff;
131
+ }
132
+
133
+ .stage-btn[data-stage="feedback"] {
134
+ background: rgb(69, 124, 213);
135
+ color: #fff;
136
+ }
137
+
138
+ .stage-btn[data-stage="planning"] {
139
+ background: rgb(125, 72, 184);
140
+ color: #fff;
141
+ }
142
+
143
+ .stage-btn:hover {
144
+ transform: translate(-50%, -50%) scale(1.12);
145
+ box-shadow:
146
+ 0 8px 30px rgba(0, 0, 0, 0.2),
147
+ 0 4px 12px rgba(0, 0, 0, 0.15);
148
+ }
149
+
150
+ .stage-btn.tbd {
151
+ background: linear-gradient(135deg, #94a3b8 0%, #cbd5e1 100%) !important;
152
+ opacity: 0.8;
153
+ cursor: not-allowed;
154
+ }
155
+
156
+ .stage-btn.tbd:hover {
157
+ transform: translate(-50%, -50%) scale(1.05);
158
+ }
159
+
160
+ /* Stage Icon & Label */
161
+ .stage-icon {
162
+ font-size: 1.4rem;
163
+ margin-bottom: 2px;
164
+ }
165
+
166
+ .stage-label {
167
+ font-size: 0.6rem;
168
+ font-weight: 600;
169
+ letter-spacing: 0.03em;
170
+ text-transform: uppercase;
171
+ line-height: 1.1;
172
+ text-align: center;
173
+ }
174
+
175
+ /* TBD Badge */
176
+ .tbd-badge {
177
+ position: absolute;
178
+ top: -8px;
179
+ right: -8px;
180
+ background: #ef4444;
181
+ color: #fff;
182
+ font-size: 0.6rem;
183
+ font-weight: 700;
184
+ padding: 2px 6px;
185
+ border-radius: 4px;
186
+ }
187
+
188
+ /* Legend */
189
+ .homepage-legend {
190
+ display: flex;
191
+ gap: 2rem;
192
+ margin-top: 2rem;
193
+ font-size: 0.9rem;
194
+ color: var(--bs-secondary-color, #6c757d);
195
+ }
196
+
197
+ .legend-control::before {
198
+ color: #4facfe;
199
+ }
200
+
201
+ .legend-transparency::before {
202
+ color: #a855f7;
203
+ }
204
+
205
+ /* Tooltip */
206
+ .homepage-tooltip {
207
+ position: fixed;
208
+ background: #1f2937;
209
+ color: #fff;
210
+ padding: 0.5rem 1rem;
211
+ border-radius: 6px;
212
+ font-size: 0.875rem;
213
+ box-shadow: 0 4px 15px rgba(0, 0, 0, 0.3);
214
+ transform: translateX(-50%);
215
+ z-index: 1000;
216
+ pointer-events: none;
217
+ }
218
+
219
+ .homepage-tooltip::before {
220
+ content: '';
221
+ position: absolute;
222
+ top: -6px;
223
+ left: 50%;
224
+ transform: translateX(-50%);
225
+ border-left: 6px solid transparent;
226
+ border-right: 6px solid transparent;
227
+ border-bottom: 6px solid #1f2937;
228
+ }
229
+
230
+ /* Sidebar Highlight - Epic neon glow effect */
231
+ .homepage-highlight {
232
+ position: relative;
233
+ overflow: hidden;
234
+ background: linear-gradient(90deg,
235
+ rgba(139, 92, 246, 0.25) 0%,
236
+ rgba(59, 130, 246, 0.15) 50%,
237
+ rgba(236, 72, 153, 0.2) 100%) !important;
238
+ border-left: 3px solid transparent !important;
239
+ border-image: linear-gradient(180deg, #8b5cf6, #3b82f6, #ec4899) 1 !important;
240
+ box-shadow:
241
+ 0 0 15px rgba(139, 92, 246, 0.5),
242
+ 0 0 30px rgba(59, 130, 246, 0.3),
243
+ 0 0 60px rgba(139, 92, 246, 0.15),
244
+ inset 0 0 15px rgba(139, 92, 246, 0.1);
245
+ animation: homepage-highlight-neon 2s ease-in-out infinite;
246
+ border-radius: 6px;
247
+ margin: 2px 4px;
248
+ padding-left: 8px !important;
249
+ z-index: 1;
250
+ }
251
+
252
+ /* Animated border gradient */
253
+ .homepage-highlight::before {
254
+ content: '';
255
+ position: absolute;
256
+ top: -2px;
257
+ left: -2px;
258
+ right: -2px;
259
+ bottom: -2px;
260
+ background: linear-gradient(45deg,
261
+ #8b5cf6, #3b82f6, #06b6d4, #ec4899,
262
+ #8b5cf6, #3b82f6, #06b6d4, #ec4899);
263
+ background-size: 400% 400%;
264
+ border-radius: 8px;
265
+ z-index: -2;
266
+ animation: homepage-border-rotate 3s linear infinite;
267
+ opacity: 0.7;
268
+ }
269
+
270
+ /* Inner fill to create border effect */
271
+ .homepage-highlight::after {
272
+ content: '';
273
+ position: absolute;
274
+ top: 0;
275
+ left: 0;
276
+ right: 0;
277
+ bottom: 0;
278
+ background: linear-gradient(90deg,
279
+ rgba(15, 23, 42, 0.85) 0%,
280
+ rgba(15, 23, 42, 0.7) 50%,
281
+ rgba(15, 23, 42, 0.85) 100%);
282
+ border-radius: 6px;
283
+ z-index: -1;
284
+ animation: homepage-highlight-shimmer 2s ease-in-out infinite;
285
+ }
286
+
287
+ /* Neon pulse */
288
+ @keyframes homepage-highlight-neon {
289
+ 0%, 100% {
290
+ box-shadow:
291
+ 0 0 15px rgba(139, 92, 246, 0.5),
292
+ 0 0 30px rgba(59, 130, 246, 0.3),
293
+ 0 0 60px rgba(139, 92, 246, 0.15),
294
+ inset 0 0 15px rgba(139, 92, 246, 0.1);
295
+ }
296
+ 33% {
297
+ box-shadow:
298
+ 0 0 20px rgba(59, 130, 246, 0.6),
299
+ 0 0 40px rgba(6, 182, 212, 0.4),
300
+ 0 0 80px rgba(59, 130, 246, 0.2),
301
+ inset 0 0 20px rgba(59, 130, 246, 0.15);
302
+ }
303
+ 66% {
304
+ box-shadow:
305
+ 0 0 20px rgba(236, 72, 153, 0.5),
306
+ 0 0 40px rgba(139, 92, 246, 0.35),
307
+ 0 0 80px rgba(236, 72, 153, 0.2),
308
+ inset 0 0 20px rgba(236, 72, 153, 0.1);
309
+ }
310
+ }
311
+
312
+ /* Rotating gradient border */
313
+ @keyframes homepage-border-rotate {
314
+ 0% { background-position: 0% 50%; }
315
+ 50% { background-position: 100% 50%; }
316
+ 100% { background-position: 0% 50%; }
317
+ }
318
+
319
+ /* Inner shimmer */
320
+ @keyframes homepage-highlight-shimmer {
321
+ 0%, 100% { opacity: 0.85; }
322
+ 50% { opacity: 0.7; }
323
+ }
324
+
325
+ /* Responsive - Hide on mobile */
326
+ @media (max-width: 768px) {
327
+ .homepage-infinity-container {
328
+ display: none;
329
+ }
330
+ }
@@ -0,0 +1,301 @@
1
+ /**
2
+ * FEATURE-025-A: Knowledge Base Core CSS
3
+ *
4
+ * Two-column layout (like Ideation view) with tree on left of content area.
5
+ */
6
+
7
+ /* Override content-body padding when KB container is displayed */
8
+ .content-body:has(.kb-container) {
9
+ padding: 0;
10
+ }
11
+
12
+ /* Override content-area background when KB is displayed to avoid white gap */
13
+ .content-area:has(.kb-container) {
14
+ background-color: var(--bg-primary, #1e1e1e);
15
+ }
16
+
17
+ /* KB Container - Two column layout */
18
+ .kb-container {
19
+ display: flex;
20
+ height: 100%;
21
+ width: 100%;
22
+ overflow: hidden;
23
+ background: var(--bg-primary, #1e1e1e);
24
+ }
25
+
26
+ /* KB Sidebar (within content area, not main sidebar) */
27
+ .kb-sidebar {
28
+ width: 280px;
29
+ min-width: 240px;
30
+ max-width: 400px;
31
+ display: flex;
32
+ flex-direction: column;
33
+ background: var(--bg-secondary, #252526);
34
+ border-right: 1px solid var(--border-color, #3d3d3d);
35
+ }
36
+
37
+ .kb-sidebar-header {
38
+ display: flex;
39
+ align-items: center;
40
+ justify-content: space-between;
41
+ padding: 0.75rem 1rem;
42
+ border-bottom: 1px solid var(--border-color, #3d3d3d);
43
+ }
44
+
45
+ .kb-sidebar-title {
46
+ font-weight: 600;
47
+ color: var(--text-primary, #e0e0e0);
48
+ font-size: 0.875rem;
49
+ }
50
+
51
+ .kb-refresh-btn {
52
+ background: transparent;
53
+ border: none;
54
+ color: var(--text-muted, #808080);
55
+ cursor: pointer;
56
+ padding: 0.25rem;
57
+ border-radius: 3px;
58
+ transition: all 0.15s;
59
+ }
60
+
61
+ .kb-refresh-btn:hover {
62
+ color: var(--text-primary, #e0e0e0);
63
+ background: var(--bg-hover, #2a2a2a);
64
+ }
65
+
66
+ .kb-search-box {
67
+ padding: 0.5rem 0.75rem;
68
+ border-bottom: 1px solid var(--border-color, #3d3d3d);
69
+ }
70
+
71
+ .kb-search-input {
72
+ width: 100%;
73
+ padding: 0.375rem 0.75rem;
74
+ background: var(--bg-darker, #1e1e1e);
75
+ border: 1px solid var(--border-color, #3d3d3d);
76
+ border-radius: 4px;
77
+ color: var(--text-primary, #e0e0e0);
78
+ font-size: 0.813rem;
79
+ }
80
+
81
+ .kb-search-input::placeholder {
82
+ color: var(--text-muted, #808080);
83
+ }
84
+
85
+ .kb-search-input:focus {
86
+ outline: none;
87
+ border-color: var(--accent-color, #0d6efd);
88
+ }
89
+
90
+ /* KB Tree */
91
+ .kb-tree {
92
+ flex: 1;
93
+ overflow-y: auto;
94
+ padding: 0.5rem 0;
95
+ }
96
+
97
+ .kb-loading {
98
+ padding: 1rem;
99
+ text-align: center;
100
+ color: var(--text-muted, #808080);
101
+ }
102
+
103
+ /* KB Folder */
104
+ .kb-folder {
105
+ margin-bottom: 0.25rem;
106
+ }
107
+
108
+ .kb-folder-header {
109
+ display: flex;
110
+ align-items: center;
111
+ gap: 0.5rem;
112
+ padding: 0.375rem 0.75rem;
113
+ cursor: pointer;
114
+ color: var(--text-secondary, #cccccc);
115
+ font-size: 0.875rem;
116
+ transition: background-color 0.15s;
117
+ }
118
+
119
+ .kb-folder-header:hover {
120
+ background: var(--bg-hover, #2a2a2a);
121
+ }
122
+
123
+ .kb-folder-header i:first-child {
124
+ font-size: 0.75rem;
125
+ color: var(--text-muted, #808080);
126
+ width: 12px;
127
+ }
128
+
129
+ .kb-folder-files {
130
+ padding-left: 1.5rem;
131
+ }
132
+
133
+ .kb-folder.collapsed .kb-folder-files {
134
+ display: none;
135
+ }
136
+
137
+ /* KB File Item */
138
+ .kb-file-item {
139
+ display: flex;
140
+ align-items: center;
141
+ gap: 0.5rem;
142
+ padding: 0.25rem 0.75rem;
143
+ font-size: 0.813rem;
144
+ color: var(--text-primary, #e0e0e0);
145
+ cursor: pointer;
146
+ border-radius: 3px;
147
+ transition: background-color 0.15s;
148
+ }
149
+
150
+ .kb-file-item:hover {
151
+ background: var(--bg-hover, #2a2a2a);
152
+ }
153
+
154
+ .kb-file-item.active {
155
+ background: var(--accent-color-dim, rgba(13, 110, 253, 0.2));
156
+ color: var(--accent-color, #0d6efd);
157
+ }
158
+
159
+ .kb-file-item i {
160
+ font-size: 0.875rem;
161
+ width: 16px;
162
+ text-align: center;
163
+ }
164
+
165
+ .kb-file-name {
166
+ overflow: hidden;
167
+ text-overflow: ellipsis;
168
+ white-space: nowrap;
169
+ }
170
+
171
+ .kb-empty {
172
+ padding: 0.5rem 0.75rem;
173
+ font-size: 0.813rem;
174
+ color: var(--text-muted, #808080);
175
+ font-style: italic;
176
+ }
177
+
178
+ .kb-empty-state {
179
+ padding: 2rem 1rem;
180
+ text-align: center;
181
+ color: var(--text-muted, #808080);
182
+ }
183
+
184
+ .kb-empty-state i {
185
+ font-size: 2rem;
186
+ display: block;
187
+ margin-bottom: 0.5rem;
188
+ }
189
+
190
+ /* KB Content (right side) */
191
+ .kb-content {
192
+ flex: 1;
193
+ overflow-y: auto;
194
+ padding: 1.5rem;
195
+ background: var(--bg-primary, #1e1e1e);
196
+ }
197
+
198
+ .kb-placeholder {
199
+ display: flex;
200
+ flex-direction: column;
201
+ align-items: center;
202
+ justify-content: center;
203
+ height: 100%;
204
+ color: var(--text-muted, #808080);
205
+ }
206
+
207
+ .kb-placeholder i {
208
+ font-size: 3rem;
209
+ margin-bottom: 1rem;
210
+ }
211
+
212
+ .kb-placeholder h5 {
213
+ color: var(--text-secondary, #cccccc);
214
+ }
215
+
216
+ /* KB Welcome/Stats View */
217
+ .kb-welcome {
218
+ max-width: 800px;
219
+ }
220
+
221
+ .kb-stats {
222
+ display: flex;
223
+ align-items: center;
224
+ }
225
+
226
+ .kb-section h6 {
227
+ color: var(--text-secondary, #cccccc);
228
+ margin-bottom: 0.75rem;
229
+ display: flex;
230
+ align-items: center;
231
+ }
232
+
233
+ .kb-landing-list {
234
+ border: 1px solid var(--border-color, #3d3d3d);
235
+ border-radius: 4px;
236
+ background: var(--bg-darker, #252526);
237
+ }
238
+
239
+ .kb-landing-file {
240
+ display: flex;
241
+ align-items: center;
242
+ gap: 0.5rem;
243
+ padding: 0.5rem 0.75rem;
244
+ border-bottom: 1px solid var(--border-color, #3d3d3d);
245
+ color: var(--text-primary, #e0e0e0);
246
+ font-size: 0.875rem;
247
+ }
248
+
249
+ .kb-landing-file:last-child {
250
+ border-bottom: none;
251
+ }
252
+
253
+ .kb-topics-grid {
254
+ display: flex;
255
+ flex-wrap: wrap;
256
+ gap: 0.5rem;
257
+ }
258
+
259
+ .kb-topic-card {
260
+ display: flex;
261
+ align-items: center;
262
+ padding: 0.5rem 0.75rem;
263
+ background: var(--bg-darker, #252526);
264
+ border: 1px solid var(--border-color, #3d3d3d);
265
+ border-radius: 4px;
266
+ color: var(--text-primary, #e0e0e0);
267
+ font-size: 0.875rem;
268
+ transition: border-color 0.15s;
269
+ }
270
+
271
+ .kb-topic-card:hover {
272
+ border-color: var(--accent-color, #0d6efd);
273
+ }
274
+
275
+ /* KB File Preview */
276
+ .kb-file-preview {
277
+ background: var(--bg-darker, #252526);
278
+ border: 1px solid var(--border-color, #3d3d3d);
279
+ border-radius: 6px;
280
+ padding: 1.5rem;
281
+ }
282
+
283
+ .kb-file-header {
284
+ display: flex;
285
+ align-items: center;
286
+ gap: 1rem;
287
+ }
288
+
289
+ .kb-file-info h6 {
290
+ color: var(--text-primary, #e0e0e0);
291
+ }
292
+
293
+ .kb-file-meta .badge {
294
+ font-weight: 400;
295
+ }
296
+
297
+ .kb-error {
298
+ padding: 2rem;
299
+ text-align: center;
300
+ color: var(--text-danger, #dc3545);
301
+ }