@houtini/gemini-mcp 1.4.2 → 2.2.0

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 (171) hide show
  1. package/README.md +314 -784
  2. package/claude_desktop_config_example.json +1 -0
  3. package/dist/config/index.d.ts.map +1 -1
  4. package/dist/config/index.js +8 -4
  5. package/dist/config/index.js.map +1 -1
  6. package/dist/config/types.d.ts +5 -0
  7. package/dist/config/types.d.ts.map +1 -1
  8. package/dist/image-viewer/image-viewer-app.html +180 -0
  9. package/dist/image-viewer/src/ui/image-viewer.html +324 -0
  10. package/dist/index-new.d.ts +3 -0
  11. package/dist/index-new.d.ts.map +1 -0
  12. package/dist/index-new.js +7 -0
  13. package/dist/index-new.js.map +1 -0
  14. package/dist/index.d.ts +3 -1
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +70 -172
  17. package/dist/index.js.map +1 -1
  18. package/dist/landing-page-viewer/src/ui/landing-page-viewer.html +330 -0
  19. package/dist/services/gemini/export.d.ts +5 -0
  20. package/dist/services/gemini/export.d.ts.map +1 -0
  21. package/dist/services/gemini/export.js +5 -0
  22. package/dist/services/gemini/export.js.map +1 -0
  23. package/dist/services/gemini/image-service.d.ts +45 -0
  24. package/dist/services/gemini/image-service.d.ts.map +1 -0
  25. package/dist/services/gemini/image-service.js +248 -0
  26. package/dist/services/gemini/image-service.js.map +1 -0
  27. package/dist/services/gemini/index.d.ts +7 -2
  28. package/dist/services/gemini/index.d.ts.map +1 -1
  29. package/dist/services/gemini/index.js +132 -56
  30. package/dist/services/gemini/index.js.map +1 -1
  31. package/dist/services/gemini/types.d.ts +32 -0
  32. package/dist/services/gemini/types.d.ts.map +1 -1
  33. package/dist/services/gemini/video-service.d.ts +58 -0
  34. package/dist/services/gemini/video-service.d.ts.map +1 -0
  35. package/dist/services/gemini/video-service.js +325 -0
  36. package/dist/services/gemini/video-service.js.map +1 -0
  37. package/dist/services/media-server.d.ts +28 -0
  38. package/dist/services/media-server.d.ts.map +1 -0
  39. package/dist/services/media-server.js +195 -0
  40. package/dist/services/media-server.js.map +1 -0
  41. package/dist/svg-viewer/src/ui/svg-viewer.html +325 -0
  42. package/dist/tools/gemini-chat.d.ts.map +1 -1
  43. package/dist/tools/gemini-chat.js +7 -1
  44. package/dist/tools/gemini-chat.js.map +1 -1
  45. package/dist/tools/gemini-deep-research.d.ts +1 -2
  46. package/dist/tools/gemini-deep-research.d.ts.map +1 -1
  47. package/dist/tools/gemini-deep-research.js +11 -51
  48. package/dist/tools/gemini-deep-research.js.map +1 -1
  49. package/dist/tools/gemini-help.d.ts +3 -0
  50. package/dist/tools/gemini-help.d.ts.map +1 -0
  51. package/dist/tools/gemini-help.js +534 -0
  52. package/dist/tools/gemini-help.js.map +1 -0
  53. package/dist/tools/gemini-prompt-assistant.d.ts +20 -0
  54. package/dist/tools/gemini-prompt-assistant.d.ts.map +1 -0
  55. package/dist/tools/gemini-prompt-assistant.js +129 -0
  56. package/dist/tools/gemini-prompt-assistant.js.map +1 -0
  57. package/dist/tools/generate-landing-page.d.ts +15 -0
  58. package/dist/tools/generate-landing-page.d.ts.map +1 -0
  59. package/dist/tools/generate-landing-page.js +66 -0
  60. package/dist/tools/generate-landing-page.js.map +1 -0
  61. package/dist/tools/generate-svg.d.ts +14 -0
  62. package/dist/tools/generate-svg.d.ts.map +1 -0
  63. package/dist/tools/generate-svg.js +106 -0
  64. package/dist/tools/generate-svg.js.map +1 -0
  65. package/dist/tools/generate-video.d.ts +24 -0
  66. package/dist/tools/generate-video.d.ts.map +1 -0
  67. package/dist/tools/generate-video.js +163 -0
  68. package/dist/tools/generate-video.js.map +1 -0
  69. package/dist/tools/image-prompt-assistant.d.ts +3 -0
  70. package/dist/tools/image-prompt-assistant.d.ts.map +1 -0
  71. package/dist/tools/image-prompt-assistant.js +790 -0
  72. package/dist/tools/image-prompt-assistant.js.map +1 -0
  73. package/dist/tools/load-image-from-path.d.ts +11 -0
  74. package/dist/tools/load-image-from-path.d.ts.map +1 -0
  75. package/dist/tools/load-image-from-path.js +100 -0
  76. package/dist/tools/load-image-from-path.js.map +1 -0
  77. package/dist/tools/prompt-library/charts.d.ts +325 -0
  78. package/dist/tools/prompt-library/charts.d.ts.map +1 -0
  79. package/dist/tools/prompt-library/charts.js +384 -0
  80. package/dist/tools/prompt-library/charts.js.map +1 -0
  81. package/dist/tools/prompt-library/index.d.ts +8 -0
  82. package/dist/tools/prompt-library/index.d.ts.map +1 -0
  83. package/dist/tools/prompt-library/index.js +10 -0
  84. package/dist/tools/prompt-library/index.js.map +1 -0
  85. package/dist/tools/register-analyze-image.d.ts +3 -0
  86. package/dist/tools/register-analyze-image.d.ts.map +1 -0
  87. package/dist/tools/register-analyze-image.js +67 -0
  88. package/dist/tools/register-analyze-image.js.map +1 -0
  89. package/dist/tools/register-chat.d.ts +3 -0
  90. package/dist/tools/register-chat.d.ts.map +1 -0
  91. package/dist/tools/register-chat.js +71 -0
  92. package/dist/tools/register-chat.js.map +1 -0
  93. package/dist/tools/register-deep-research.d.ts +3 -0
  94. package/dist/tools/register-deep-research.d.ts.map +1 -0
  95. package/dist/tools/register-deep-research.js +59 -0
  96. package/dist/tools/register-deep-research.js.map +1 -0
  97. package/dist/tools/register-describe-image.d.ts +3 -0
  98. package/dist/tools/register-describe-image.d.ts.map +1 -0
  99. package/dist/tools/register-describe-image.js +59 -0
  100. package/dist/tools/register-describe-image.js.map +1 -0
  101. package/dist/tools/register-image-gen.d.ts +3 -0
  102. package/dist/tools/register-image-gen.d.ts.map +1 -0
  103. package/dist/tools/register-image-gen.js +235 -0
  104. package/dist/tools/register-image-gen.js.map +1 -0
  105. package/dist/tools/register-landing-page.d.ts +3 -0
  106. package/dist/tools/register-landing-page.d.ts.map +1 -0
  107. package/dist/tools/register-landing-page.js +79 -0
  108. package/dist/tools/register-landing-page.js.map +1 -0
  109. package/dist/tools/register-list-models.d.ts +3 -0
  110. package/dist/tools/register-list-models.d.ts.map +1 -0
  111. package/dist/tools/register-list-models.js +33 -0
  112. package/dist/tools/register-list-models.js.map +1 -0
  113. package/dist/tools/register-load-image.d.ts +3 -0
  114. package/dist/tools/register-load-image.d.ts.map +1 -0
  115. package/dist/tools/register-load-image.js +66 -0
  116. package/dist/tools/register-load-image.js.map +1 -0
  117. package/dist/tools/register-svg.d.ts +3 -0
  118. package/dist/tools/register-svg.d.ts.map +1 -0
  119. package/dist/tools/register-svg.js +84 -0
  120. package/dist/tools/register-svg.js.map +1 -0
  121. package/dist/tools/register-video.d.ts +3 -0
  122. package/dist/tools/register-video.d.ts.map +1 -0
  123. package/dist/tools/register-video.js +118 -0
  124. package/dist/tools/register-video.js.map +1 -0
  125. package/dist/tools/register-viewers.d.ts +8 -0
  126. package/dist/tools/register-viewers.d.ts.map +1 -0
  127. package/dist/tools/register-viewers.js +89 -0
  128. package/dist/tools/register-viewers.js.map +1 -0
  129. package/dist/tools/schemas.d.ts +33 -0
  130. package/dist/tools/schemas.d.ts.map +1 -0
  131. package/dist/tools/schemas.js +39 -0
  132. package/dist/tools/schemas.js.map +1 -0
  133. package/dist/tools/types.d.ts +12 -0
  134. package/dist/tools/types.d.ts.map +1 -0
  135. package/dist/tools/types.js +2 -0
  136. package/dist/tools/types.js.map +1 -0
  137. package/dist/ui/image-viewer.d.ts +2 -0
  138. package/dist/ui/image-viewer.d.ts.map +1 -0
  139. package/dist/ui/image-viewer.js +42 -0
  140. package/dist/ui/image-viewer.js.map +1 -0
  141. package/dist/utils/chart-design-system.d.ts +92 -0
  142. package/dist/utils/chart-design-system.d.ts.map +1 -0
  143. package/dist/utils/chart-design-system.js +235 -0
  144. package/dist/utils/chart-design-system.js.map +1 -0
  145. package/dist/utils/image-compress.d.ts +9 -0
  146. package/dist/utils/image-compress.d.ts.map +1 -0
  147. package/dist/utils/image-compress.js +43 -0
  148. package/dist/utils/image-compress.js.map +1 -0
  149. package/dist/utils/image-utils.d.ts +9 -0
  150. package/dist/utils/image-utils.d.ts.map +1 -0
  151. package/dist/utils/image-utils.js +257 -0
  152. package/dist/utils/image-utils.js.map +1 -0
  153. package/dist/utils/logger.d.ts.map +1 -1
  154. package/dist/utils/logger.js +45 -11
  155. package/dist/utils/logger.js.map +1 -1
  156. package/dist/utils/resolve-images.d.ts +29 -0
  157. package/dist/utils/resolve-images.d.ts.map +1 -0
  158. package/dist/utils/resolve-images.js +56 -0
  159. package/dist/utils/resolve-images.js.map +1 -0
  160. package/dist/utils/tool-wrapper.d.ts +13 -0
  161. package/dist/utils/tool-wrapper.d.ts.map +1 -0
  162. package/dist/utils/tool-wrapper.js +22 -0
  163. package/dist/utils/tool-wrapper.js.map +1 -0
  164. package/dist/utils/video-utils.d.ts +16 -0
  165. package/dist/utils/video-utils.d.ts.map +1 -0
  166. package/dist/utils/video-utils.js +319 -0
  167. package/dist/utils/video-utils.js.map +1 -0
  168. package/dist/video-viewer/src/ui/video-viewer.html +310 -0
  169. package/houtini-logo.jpg +0 -0
  170. package/package.json +24 -8
  171. package/server.json +30 -0
@@ -0,0 +1,384 @@
1
+ /**
2
+ * Chart & Data Visualization Prompt Enhancement v2.0
3
+ *
4
+ * Expanded design systems based on influential data visualization pioneers:
5
+ * - Edward Tufte (minimal data-ink)
6
+ * - Cole Nussbaumer Knaflic (strategic highlighting)
7
+ * - Observable/D3.js (interactive exploration)
8
+ * - FiveThirtyEight/The Economist (editorial storytelling)
9
+ * - Financial Times (elegant journalism)
10
+ * - Nature/Science journals (academic rigor)
11
+ * - Bloomberg/Fintech (high-density terminals)
12
+ * - W.E.B. Du Bois (modernist geometry)
13
+ * - IBM Carbon/Tailwind (enterprise UI)
14
+ *
15
+ * Usage:
16
+ * const enhanced = enhanceChartPrompt(basePrompt, {
17
+ * colorScheme: 'storytelling',
18
+ * chartType: 'bar'
19
+ * });
20
+ */
21
+ const COLOR_SYSTEMS = {
22
+ professional: {
23
+ background: '#ffffff',
24
+ primary: ['#2563eb', '#7c3aed', '#dc2626', '#ea580c', '#ca8a04'],
25
+ neutral: ['#0f172a', '#475569', '#94a3b8', '#cbd5e1', '#f1f5f9'],
26
+ accent: ['#06b6d4', '#10b981', '#f59e0b'],
27
+ text: '#0f172a',
28
+ gridlines: '#e5e7eb',
29
+ axis: '#6b7280',
30
+ description: 'IBM Carbon, Tailwind-inspired professional palette'
31
+ },
32
+ editorial: {
33
+ background: '#ffffff',
34
+ primary: ['#e63946', '#f1faee', '#a8dadc', '#457b9d', '#1d3557'],
35
+ neutral: ['#2b2d42', '#8d99ae', '#edf2f4'],
36
+ accent: ['#ff6b6b', '#4ecdc4'],
37
+ text: '#2b2d42',
38
+ gridlines: '#edf2f4',
39
+ axis: '#8d99ae',
40
+ description: 'FiveThirtyEight, Economist-inspired editorial colours'
41
+ },
42
+ scientific: {
43
+ background: '#ffffff',
44
+ primary: ['#003f5c', '#58508d', '#bc5090', '#ff6361', '#ffa600'],
45
+ neutral: ['#1a1a1a', '#4a4a4a', '#8a8a8a', '#cacaca', '#f0f0f0'],
46
+ accent: ['#00d9ff', '#7209b7'],
47
+ text: '#1a1a1a',
48
+ gridlines: '#e5e5e5',
49
+ axis: '#4a4a4a',
50
+ description: 'Nature, Science journal-inspired academic palette'
51
+ },
52
+ minimal: {
53
+ background: '#fafafa',
54
+ primary: ['#000000', '#404040', '#737373', '#a6a6a6', '#d9d9d9'],
55
+ neutral: ['#fafafa', '#f5f5f5', '#e5e5e5'],
56
+ accent: ['#2563eb', '#dc2626'],
57
+ text: '#000000',
58
+ gridlines: '#f5f5f5',
59
+ axis: '#737373',
60
+ description: 'Edward Tufte-inspired minimal data-ink approach'
61
+ },
62
+ dark: {
63
+ background: '#0a0a0a',
64
+ primary: ['#60a5fa', '#a78bfa', '#f472b6', '#fb923c', '#fbbf24'],
65
+ neutral: ['#0a0a0a', '#1f1f1f', '#404040', '#737373', '#a6a6a6'],
66
+ accent: ['#22d3ee', '#34d399'],
67
+ text: '#ffffff',
68
+ gridlines: '#1f1f1f',
69
+ axis: '#737373',
70
+ description: 'Observable dark mode, GitHub dark-inspired'
71
+ },
72
+ storytelling: {
73
+ background: '#ffffff',
74
+ primary: ['#bfbfbf', '#999999', '#737373'], // Base data (muted)
75
+ neutral: ['#595959', '#d9d9d9', '#f2f2f2'],
76
+ accent: ['#005a9c', '#f26c23', '#c00000'], // Highlight colors (pick one)
77
+ text: '#262626',
78
+ gridlines: '#f2f2f2',
79
+ axis: '#d9d9d9',
80
+ description: 'Cole Nussbaumer Knaflic - strategic highlighting with pre-attentive processing'
81
+ },
82
+ financial: {
83
+ background: '#fff1e5', // Famous FT Pink
84
+ primary: ['#0f5499', '#0d7680', '#cc0000', '#5a298c', '#d9a300'],
85
+ neutral: ['#33302e', '#e9decf'],
86
+ accent: ['#0f5499', '#cc0000'],
87
+ text: '#33302e',
88
+ gridlines: '#ffffff', // White gridlines on pink background
89
+ axis: '#33302e',
90
+ description: 'Financial Times - elegant editorial with signature salmon background'
91
+ },
92
+ terminal: {
93
+ background: '#000000',
94
+ primary: ['#00e3d1', '#34e05b', '#ff2b6d', '#ff8e15', '#fdee00'], // Electric/neon
95
+ neutral: ['#111111', '#2a2a2a', '#333333'],
96
+ accent: ['#00e3d1', '#ff2b6d'],
97
+ text: '#ffffff',
98
+ gridlines: '#2a2a2a',
99
+ axis: '#aaaaaa',
100
+ description: 'Bloomberg/Fintech - high-density terminal with electric neon accents'
101
+ },
102
+ modernist: {
103
+ background: '#e5ded0', // Modern parchment/manila
104
+ primary: ['#dc143c', '#009b77', '#ffd700', '#000080', '#654321'], // Bold primary colors
105
+ neutral: ['#1a1a1a', '#e5ded0'],
106
+ accent: ['#dc143c', '#009b77'],
107
+ text: '#1a1a1a',
108
+ gridlines: 'transparent', // No gridlines in modernist
109
+ axis: '#1a1a1a',
110
+ description: 'W.E.B. Du Bois - bold geometric modernism with stark contrasts'
111
+ }
112
+ };
113
+ const TYPOGRAPHY_SYSTEMS = {
114
+ professional: {
115
+ title: 'Inter or SF Pro',
116
+ labels: 'Inter or Roboto',
117
+ data: 'JetBrains Mono',
118
+ sizes: { title: '18-24px', subtitle: '14-16px', labels: '11-13px', annotations: '10-12px' },
119
+ weights: { title: 600, labels: 500, data: 400 }
120
+ },
121
+ editorial: {
122
+ title: 'Playfair Display',
123
+ labels: 'Franklin Gothic',
124
+ data: 'Courier New',
125
+ sizes: { title: '24-32px', subtitle: '16-20px', labels: '12-14px', annotations: '11-13px' },
126
+ weights: { title: 700, labels: 400, data: 400 }
127
+ },
128
+ scientific: {
129
+ title: 'Arial',
130
+ labels: 'Arial',
131
+ data: 'Monaco',
132
+ sizes: { title: '16-20px', subtitle: '13-15px', labels: '10-12px', annotations: '9-11px' },
133
+ weights: { title: 600, labels: 400, data: 400 }
134
+ },
135
+ storytelling: {
136
+ title: 'Inter or Helvetica Neue',
137
+ labels: 'Inter or Arial',
138
+ data: 'Inter',
139
+ sizes: { title: '20-26px', subtitle: '14-16px', labels: '11-13px', annotations: '10-12px' },
140
+ weights: { title: 700, labels: 400, data: 700 } // Bold for highlighted data
141
+ },
142
+ financial: {
143
+ title: 'Merriweather or Playfair Display', // Serif for narrative
144
+ labels: 'Open Sans or Fira Sans', // Sans for data
145
+ data: 'Open Sans',
146
+ sizes: { title: '22-28px', subtitle: '14-18px', labels: '11-13px', annotations: '10-12px' },
147
+ weights: { title: 600, labels: 400, data: 400 }
148
+ },
149
+ terminal: {
150
+ title: 'Inter',
151
+ labels: 'Roboto Mono or IBM Plex Mono', // Monospace for precision
152
+ data: 'JetBrains Mono',
153
+ sizes: { title: '16-22px', subtitle: '13-16px', labels: '10-12px', annotations: '9-11px' },
154
+ weights: { title: 700, labels: 400, data: 400 }
155
+ },
156
+ modernist: {
157
+ title: 'Jost or Futura', // Geometric sans
158
+ labels: 'Jost or Public Sans',
159
+ data: 'Jost',
160
+ sizes: { title: '24-32px', subtitle: '16-20px', labels: '12-14px', annotations: '11-13px' },
161
+ weights: { title: 700, labels: 600, data: 700 }
162
+ }
163
+ };
164
+ const DESIGN_PRINCIPLES = {
165
+ 'data-ink': `
166
+ • Maximize data-ink ratio (Tufte principle)
167
+ • Remove chartjunk and unnecessary decoration
168
+ • Use subtle gridlines (1px, 10-15% opacity)
169
+ • Direct labeling instead of legends when possible
170
+ • Minimal borders and backgrounds
171
+ `,
172
+ 'storytelling': `
173
+ • Clear visual hierarchy with focal points
174
+ • Progressive disclosure of complexity
175
+ • Annotations and callouts for key insights
176
+ • Contextual reference lines or benchmarks
177
+ • Narrative flow through chart elements
178
+ `,
179
+ 'exploration': `
180
+ • Rich interactive affordances suggested visually
181
+ • Tooltip regions clearly defined
182
+ • Hover states indicated subtly
183
+ • Multiple layers of detail accessibility
184
+ • Clear filtering and selection states
185
+ `,
186
+ 'presentation': `
187
+ • High contrast for projector/screen visibility
188
+ • Large, readable text (minimum 12px)
189
+ • Strong visual anchors and structure
190
+ • Balanced whitespace and breathing room
191
+ • Professional polish without decoration
192
+ `
193
+ };
194
+ const SCHEME_SPECIFIC_RULES = {
195
+ storytelling: `
196
+ STORYTELLING-SPECIFIC RULES (Cole Nussbaumer Knaflic):
197
+ • NO LEGENDS: Direct label lines/bars at endpoints using same colour as data
198
+ • ACTIONABLE TITLES: Title must be a sentence explaining the takeaway (e.g., "Sales dipped in Q3")
199
+ - Highlight key words (e.g., "dipped") in the accent colour
200
+ • Y-AXIS: Remove Y-axis line completely; keep solid X-axis line only
201
+ • GRIDLINES: No vertical gridlines; horizontal gridlines extremely faint (#f2f2f2) or removed
202
+ • COLOUR STRATEGY: Everything defaults to muted grey (#bfbfbf, #999999)
203
+ - Only ONE data series/point highlighted in bold accent (#005a9c, #f26c23, or #c00000)
204
+ • PRE-ATTENTIVE PROCESSING: Design so viewer knows where to look instantly
205
+ `,
206
+ financial: `
207
+ FINANCIAL-SPECIFIC RULES (Financial Times):
208
+ • TOP BORDER: Include solid 2px border at top of chart (#33302e)
209
+ • GRIDLINES: Thin horizontal lines in WHITE (#ffffff) or darker pink (#e9decf) behind data
210
+ • AXIS LINES: Remove Y and X axis bounding lines; let gridlines define space
211
+ • TITLE PLACEMENT: Top-left aligned; large serif title + sans-serif subtitle
212
+ • BACKGROUND: Always use FT Pink (#fff1e5) - reduces glare, distinctive editorial feel
213
+ `,
214
+ terminal: `
215
+ TERMINAL-SPECIFIC RULES (Bloomberg/Fintech):
216
+ • ZERO FILL: Avoid filled areas unless 10-15% opacity; use crisp 2px neon lines
217
+ • AXIS PLACEMENT: Y-axis labels on RIGHT side (closer to recent data in time-series)
218
+ • CROSSHAIRS: Include subtle crosshairs/vertical tooltip line (#444444 dashed)
219
+ • BORDERS: Thin 1px solid border (#333333) around entire chart area
220
+ • HIGH CONTRAST: Electric neon colours on absolute black for OLED screens
221
+ `,
222
+ modernist: `
223
+ MODERNIST-SPECIFIC RULES (W.E.B. Du Bois):
224
+ • OUTLINES: Every shape has crisp 1-2px solid #1a1a1a stroke
225
+ • NO GRADIENTS/OPACITY: Colours must be 100% solid and opaque
226
+ • NO GRIDLINES: Use direct data labels on shapes instead
227
+ • TITLES: Centered, all-caps, generous letter-spacing (0.05em)
228
+ • GEOMETRIC: Bold, poster-like blocks; flat high-contrast colours
229
+ `
230
+ };
231
+ const CHART_SPECIFICS = {
232
+ line: `
233
+ • Line weight: 2-3px for primary, 1-2px for secondary
234
+ • Point markers only at data points, not everywhere
235
+ • Differentiate series with both colour AND line style
236
+ • Y-axis starts at 0 unless justified otherwise
237
+ `,
238
+ bar: `
239
+ • Bar spacing: 10-30% of bar width
240
+ • Sorted by value unless categorical order matters
241
+ • Horizontal bars for long labels
242
+ • Subtle rounded corners (2-4px) for modern feel
243
+ `,
244
+ scatter: `
245
+ • Point size: 4-8px diameter
246
+ • 30-50% opacity for overlapping points
247
+ • Trend lines should be subtle (dashed, lighter colour)
248
+ • Legend shows both shape AND colour
249
+ `,
250
+ pie: `
251
+ • Maximum 5-7 slices (combine small values into "Other")
252
+ • Start at 12 o'clock, arrange clockwise by size
253
+ • Consider donut chart (60-70% inner radius)
254
+ • Direct slice labeling with values
255
+ `,
256
+ area: `
257
+ • Stack order matters (most important on bottom)
258
+ • 60-80% opacity to show overlaps
259
+ • Clear boundaries between areas
260
+ • Consider streamgraph for organic feel
261
+ `,
262
+ heatmap: `
263
+ • Sequential colour scale for continuous data
264
+ • Diverging scale for data with meaningful midpoint
265
+ • Include colour legend with numerical scale
266
+ • Cell annotations for key values
267
+ `,
268
+ network: `
269
+ • Node size represents importance
270
+ • Edge weight shows relationship strength
271
+ • Use force-directed or hierarchical layout
272
+ • Label key nodes only to avoid clutter
273
+ `,
274
+ treemap: `
275
+ • Colour encodes category or metric
276
+ • Size encodes primary value
277
+ • Border weight shows hierarchy level
278
+ • Include parent labels for context
279
+ `
280
+ };
281
+ /**
282
+ * Enhance a chart prompt with professional design system
283
+ */
284
+ export function enhanceChartPrompt(basePrompt, options = {}) {
285
+ const { colorScheme = 'professional', chartType = 'bar', emphasis = 'data-ink' } = options;
286
+ const colors = COLOR_SYSTEMS[colorScheme];
287
+ // Map color scheme to typography system
288
+ const typographyKey = (['storytelling', 'financial', 'terminal', 'modernist'].includes(colorScheme))
289
+ ? colorScheme
290
+ : (colorScheme === 'editorial' ? 'editorial' :
291
+ colorScheme === 'scientific' ? 'scientific' : 'professional');
292
+ const typography = TYPOGRAPHY_SYSTEMS[typographyKey];
293
+ const principles = DESIGN_PRINCIPLES[emphasis];
294
+ const specifics = CHART_SPECIFICS[chartType] || '';
295
+ // Include scheme-specific rules if available
296
+ const schemeRules = SCHEME_SPECIFIC_RULES[colorScheme] || '';
297
+ return `${basePrompt}
298
+
299
+ PROFESSIONAL DESIGN SYSTEM:
300
+ Style: ${colors.description}
301
+
302
+ COLOUR PALETTE:
303
+ Background: ${colors.background}
304
+ Primary data: ${colors.primary.join(', ')}
305
+ Neutral/greys: ${colors.neutral.join(', ')}
306
+ Accent highlights: ${colors.accent.join(', ')}
307
+ Text: ${colors.text}
308
+ Gridlines: ${colors.gridlines}
309
+ Axis: ${colors.axis}
310
+
311
+ TYPOGRAPHY:
312
+ • Titles: ${typography.title} at ${typography.sizes.title}, font-weight ${typography.weights.title}
313
+ • Axis labels: ${typography.labels} at ${typography.sizes.labels}, font-weight ${typography.weights.labels}
314
+ • Data labels: ${typography.data} at ${typography.sizes.labels}, font-weight ${typography.weights.data}
315
+ • Annotations: ${typography.labels} at ${typography.sizes.annotations}, font-weight 400
316
+
317
+ DESIGN PRINCIPLES:${principles}
318
+ ${schemeRules}
319
+ CHART-SPECIFIC GUIDELINES:${specifics}
320
+
321
+ LAYOUT & SPACING:
322
+ • Margins: 40-60px (top/bottom), 50-80px (left/right) for axis labels
323
+ • Title placement: top-left or centered, 20-30px from chart area
324
+ • Legend: top-right or bottom, with 16px item spacing (if legends are used)
325
+ • Grid alignment: aligned to data ticks
326
+
327
+ AVOID:
328
+ ❌ 3D effects, shadows, or gradients on data elements (unless modernist scheme)
329
+ ❌ Decorative borders, backgrounds, or textures
330
+ ❌ Comic Sans, Papyrus, or novelty fonts
331
+ ❌ Unnecessary chart elements (chartjunk)
332
+ ❌ Default chart library aesthetics (Excel, Google Sheets look)
333
+
334
+ ACHIEVE:
335
+ ✓ Clean, confident, professional presentation
336
+ ✓ Accessibility (WCAG AA contrast ratios minimum)
337
+ ✓ Print-ready quality (300 DPI equivalent)
338
+ ✓ Timeless design that won't look dated
339
+ ✓ Focus on data clarity and insight`;
340
+ }
341
+ /**
342
+ * Get color palette for a specific scheme
343
+ */
344
+ export function getChartColorPalette(scheme) {
345
+ return COLOR_SYSTEMS[scheme];
346
+ }
347
+ /**
348
+ * Get typography system for a specific scheme
349
+ */
350
+ export function getChartTypography(scheme) {
351
+ const typographyKey = (['storytelling', 'financial', 'terminal', 'modernist'].includes(scheme))
352
+ ? scheme
353
+ : (scheme === 'editorial' ? 'editorial' :
354
+ scheme === 'scientific' ? 'scientific' : 'professional');
355
+ return TYPOGRAPHY_SYSTEMS[typographyKey];
356
+ }
357
+ /**
358
+ * Validate chart prompt for common anti-patterns
359
+ */
360
+ export function validateChartPrompt(prompt) {
361
+ const warnings = [];
362
+ const suggestions = [];
363
+ const lower = prompt.toLowerCase();
364
+ if (lower.includes('3d') || lower.includes('shadow')) {
365
+ warnings.push('3D effects and shadows reduce data clarity');
366
+ suggestions.push('Use flat design with subtle depth cues instead');
367
+ }
368
+ if (lower.includes('gradient') && lower.includes('data')) {
369
+ warnings.push('Gradients on data elements can be distracting');
370
+ suggestions.push('Reserve gradients for backgrounds only, if at all');
371
+ }
372
+ if (!lower.includes('color') && !lower.includes('colour')) {
373
+ suggestions.push('Consider specifying a professional colour palette');
374
+ }
375
+ if (!lower.includes('font') && !lower.includes('typography')) {
376
+ suggestions.push('Specify typography for more professional results');
377
+ }
378
+ return {
379
+ valid: warnings.length === 0,
380
+ warnings,
381
+ suggestions
382
+ };
383
+ }
384
+ //# sourceMappingURL=charts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"charts.js","sourceRoot":"","sources":["../../../src/tools/prompt-library/charts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAQH,MAAM,aAAa,GAAG;IACpB,YAAY,EAAE;QACZ,UAAU,EAAE,SAAS;QACrB,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;QAChE,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;QAChE,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;QACzC,IAAI,EAAE,SAAS;QACf,SAAS,EAAE,SAAS;QACpB,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,oDAAoD;KAClE;IACD,SAAS,EAAE;QACT,UAAU,EAAE,SAAS;QACrB,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;QAChE,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;QAC1C,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;QAC9B,IAAI,EAAE,SAAS;QACf,SAAS,EAAE,SAAS;QACpB,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,uDAAuD;KACrE;IACD,UAAU,EAAE;QACV,UAAU,EAAE,SAAS;QACrB,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;QAChE,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;QAChE,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;QAC9B,IAAI,EAAE,SAAS;QACf,SAAS,EAAE,SAAS;QACpB,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,mDAAmD;KACjE;IACD,OAAO,EAAE;QACP,UAAU,EAAE,SAAS;QACrB,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;QAChE,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;QAC1C,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;QAC9B,IAAI,EAAE,SAAS;QACf,SAAS,EAAE,SAAS;QACpB,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,iDAAiD;KAC/D;IACD,IAAI,EAAE;QACJ,UAAU,EAAE,SAAS;QACrB,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;QAChE,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;QAChE,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;QAC9B,IAAI,EAAE,SAAS;QACf,SAAS,EAAE,SAAS;QACpB,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,4CAA4C;KAC1D;IACD,YAAY,EAAE;QACZ,UAAU,EAAE,SAAS;QACrB,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAG,oBAAoB;QACjE,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;QAC1C,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAG,8BAA8B;QAC1E,IAAI,EAAE,SAAS;QACf,SAAS,EAAE,SAAS;QACpB,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,gFAAgF;KAC9F;IACD,SAAS,EAAE;QACT,UAAU,EAAE,SAAS,EAAG,iBAAiB;QACzC,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;QAChE,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;QAC/B,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;QAC9B,IAAI,EAAE,SAAS;QACf,SAAS,EAAE,SAAS,EAAG,qCAAqC;QAC5D,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,sEAAsE;KACpF;IACD,QAAQ,EAAE;QACR,UAAU,EAAE,SAAS;QACrB,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAG,gBAAgB;QACnF,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;QAC1C,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;QAC9B,IAAI,EAAE,SAAS;QACf,SAAS,EAAE,SAAS;QACpB,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,sEAAsE;KACpF;IACD,SAAS,EAAE;QACT,UAAU,EAAE,SAAS,EAAG,0BAA0B;QAClD,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAG,sBAAsB;QACzF,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;QAC/B,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;QAC9B,IAAI,EAAE,SAAS;QACf,SAAS,EAAE,aAAa,EAAG,4BAA4B;QACvD,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,gEAAgE;KAC9E;CACO,CAAC;AAEX,MAAM,kBAAkB,GAAG;IACzB,YAAY,EAAE;QACZ,KAAK,EAAE,iBAAiB;QACxB,MAAM,EAAE,iBAAiB;QACzB,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE;QAC3F,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE;KAChD;IACD,SAAS,EAAE;QACT,KAAK,EAAE,kBAAkB;QACzB,MAAM,EAAE,iBAAiB;QACzB,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE;QAC3F,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE;KAChD;IACD,UAAU,EAAE;QACV,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE;QAC1F,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE;KAChD;IACD,YAAY,EAAE;QACZ,KAAK,EAAE,yBAAyB;QAChC,MAAM,EAAE,gBAAgB;QACxB,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE;QAC3F,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAE,4BAA4B;KAC9E;IACD,SAAS,EAAE;QACT,KAAK,EAAE,kCAAkC,EAAG,sBAAsB;QAClE,MAAM,EAAE,wBAAwB,EAAG,gBAAgB;QACnD,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE;QAC3F,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE;KAChD;IACD,QAAQ,EAAE;QACR,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,8BAA8B,EAAG,0BAA0B;QACnE,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE;QAC1F,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE;KAChD;IACD,SAAS,EAAE;QACT,KAAK,EAAE,gBAAgB,EAAG,iBAAiB;QAC3C,MAAM,EAAE,qBAAqB;QAC7B,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE;QAC3F,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE;KAChD;CACO,CAAC;AAEX,MAAM,iBAAiB,GAAG;IACxB,UAAU,EAAE;;;;;;GAMX;IACD,cAAc,EAAE;;;;;;GAMf;IACD,aAAa,EAAE;;;;;;GAMd;IACD,cAAc,EAAE;;;;;;GAMf;CACO,CAAC;AAEX,MAAM,qBAAqB,GAAG;IAC5B,YAAY,EAAE;;;;;;;;;;GAUb;IACD,SAAS,EAAE;;;;;;;GAOV;IACD,QAAQ,EAAE;;;;;;;GAOT;IACD,SAAS,EAAE;;;;;;;GAOV;CACO,CAAC;AAEX,MAAM,eAAe,GAAG;IACtB,IAAI,EAAE;;;;;GAKL;IACD,GAAG,EAAE;;;;;GAKJ;IACD,OAAO,EAAE;;;;;GAKR;IACD,GAAG,EAAE;;;;;GAKJ;IACD,IAAI,EAAE;;;;;GAKL;IACD,OAAO,EAAE;;;;;GAKR;IACD,OAAO,EAAE;;;;;GAKR;IACD,OAAO,EAAE;;;;;GAKR;CACO,CAAC;AAEX;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,UAAkB,EAClB,UAAmC,EAAE;IAErC,MAAM,EACJ,WAAW,GAAG,cAAc,EAC5B,SAAS,GAAG,KAAK,EACjB,QAAQ,GAAG,UAAU,EACtB,GAAG,OAAO,CAAC;IAEZ,MAAM,MAAM,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAE1C,wCAAwC;IACxC,MAAM,aAAa,GAAG,CAAC,CAAC,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAClG,CAAC,CAAC,WAA8C;QAChD,CAAC,CAAC,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;YAC3C,WAAW,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;IAEnE,MAAM,UAAU,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,eAAe,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IAEnD,6CAA6C;IAC7C,MAAM,WAAW,GAAG,qBAAqB,CAAC,WAAiD,CAAC,IAAI,EAAE,CAAC;IAEnG,OAAO,GAAG,UAAU;;;SAGb,MAAM,CAAC,WAAW;;;cAGb,MAAM,CAAC,UAAU;gBACf,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;iBACxB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;qBACrB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;QACrC,MAAM,CAAC,IAAI;aACN,MAAM,CAAC,SAAS;QACrB,MAAM,CAAC,IAAI;;;YAGP,UAAU,CAAC,KAAK,OAAO,UAAU,CAAC,KAAK,CAAC,KAAK,iBAAiB,UAAU,CAAC,OAAO,CAAC,KAAK;iBACjF,UAAU,CAAC,MAAM,OAAO,UAAU,CAAC,KAAK,CAAC,MAAM,iBAAiB,UAAU,CAAC,OAAO,CAAC,MAAM;iBACzF,UAAU,CAAC,IAAI,OAAO,UAAU,CAAC,KAAK,CAAC,MAAM,iBAAiB,UAAU,CAAC,OAAO,CAAC,IAAI;iBACrF,UAAU,CAAC,MAAM,OAAO,UAAU,CAAC,KAAK,CAAC,WAAW;;oBAEjD,UAAU;EAC5B,WAAW;4BACe,SAAS;;;;;;;;;;;;;;;;;;;;oCAoBD,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAkC;IACrE,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAkC;IACnE,MAAM,aAAa,GAAG,CAAC,CAAC,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC7F,CAAC,CAAC,MAAyC;QAC3C,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;YACtC,MAAM,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;IAC9D,OAAO,kBAAkB,CAAC,aAAa,CAAC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAKhD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IAEnC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrD,QAAQ,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QAC5D,WAAW,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACzD,QAAQ,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAC/D,WAAW,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;IACxE,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1D,WAAW,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;IACxE,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7D,WAAW,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;IACvE,CAAC;IAED,OAAO;QACL,KAAK,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC;QAC5B,QAAQ;QACR,WAAW;KACZ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Prompt Library - Modular Prompt Enhancement System
3
+ *
4
+ * Architecture: Each domain (charts, photography, etc.) is a separate module
5
+ * that exports enhancement functions. Easy to add new domains.
6
+ */
7
+ export { enhanceChartPrompt, getChartColorPalette, validateChartPrompt } from './charts.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/prompt-library/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Prompt Library - Modular Prompt Enhancement System
3
+ *
4
+ * Architecture: Each domain (charts, photography, etc.) is a separate module
5
+ * that exports enhancement functions. Easy to add new domains.
6
+ */
7
+ export { enhanceChartPrompt, getChartColorPalette, validateChartPrompt } from './charts.js';
8
+ // Future: export { enhancePhotographyPrompt, ... } from './photography.js';
9
+ // Future: export { enhanceCinematicPrompt, ... } from './cinematic.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/prompt-library/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC5F,4EAA4E;AAC5E,wEAAwE"}
@@ -0,0 +1,3 @@
1
+ import type { ToolContext } from './types.js';
2
+ export declare function register(ctx: ToolContext): void;
3
+ //# sourceMappingURL=register-analyze-image.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-analyze-image.d.ts","sourceRoot":"","sources":["../../src/tools/register-analyze-image.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAgB,QAAQ,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAkE/C"}
@@ -0,0 +1,67 @@
1
+ import * as z from 'zod';
2
+ import logger from '../utils/logger.js';
3
+ import { createToolResult } from '../utils/error-handler.js';
4
+ import { toolError } from '../utils/tool-wrapper.js';
5
+ import { resolveImageInputs } from '../utils/resolve-images.js';
6
+ import { imageInputSchema } from './schemas.js';
7
+ export function register(ctx) {
8
+ ctx.server.registerTool('analyze_image', {
9
+ title: 'Analyze Image',
10
+ description: 'Analyze and extract information from one or more images using Gemini multimodal understanding. ' +
11
+ 'Returns a text analysis — no image is generated. ' +
12
+ 'Default model: gemini-3-pro-preview.',
13
+ inputSchema: {
14
+ images: z.array(imageInputSchema)
15
+ .min(1)
16
+ .describe('One or more images to analyze'),
17
+ prompt: z.string()
18
+ .describe('What to analyze or extract from the image(s)'),
19
+ model: z.string()
20
+ .optional()
21
+ .describe('Model to use (default: gemini-3-pro-preview)'),
22
+ max_tokens: z.number()
23
+ .int()
24
+ .min(1)
25
+ .max(65536)
26
+ .optional()
27
+ .default(16384)
28
+ .describe('Maximum tokens in response (default 16384, up to 64K output limit)'),
29
+ global_media_resolution: z.enum([
30
+ 'MEDIA_RESOLUTION_LOW',
31
+ 'MEDIA_RESOLUTION_MEDIUM',
32
+ 'MEDIA_RESOLUTION_HIGH'
33
+ ])
34
+ .optional()
35
+ .describe('Global image quality for cost optimization. MEDIUM recommended for PDFs (50% savings).')
36
+ },
37
+ outputSchema: {
38
+ content: z.string(),
39
+ success: z.boolean()
40
+ }
41
+ }, async ({ images, prompt, model, max_tokens, global_media_resolution }) => {
42
+ try {
43
+ logger.info('Executing analyze_image tool', {
44
+ model,
45
+ imageCount: images.length,
46
+ globalMediaResolution: global_media_resolution
47
+ });
48
+ // Resolve filePath references server-side (bypasses MCP transport)
49
+ const resolved = await resolveImageInputs(images);
50
+ const result = await ctx.geminiService.analyzeImages({
51
+ images: resolved,
52
+ prompt,
53
+ model: model || 'gemini-3-pro-preview',
54
+ maxTokens: max_tokens,
55
+ globalMediaResolution: global_media_resolution
56
+ });
57
+ return {
58
+ content: createToolResult(true, result),
59
+ structuredContent: { content: result, success: true }
60
+ };
61
+ }
62
+ catch (error) {
63
+ return toolError('analyze_image', error);
64
+ }
65
+ });
66
+ }
67
+ //# sourceMappingURL=register-analyze-image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-analyze-image.js","sourceRoot":"","sources":["../../src/tools/register-analyze-image.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGhD,MAAM,UAAU,QAAQ,CAAC,GAAgB;IACvC,GAAG,CAAC,MAAM,CAAC,YAAY,CACrB,eAAe,EACf;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EACT,iGAAiG;YACjG,mDAAmD;YACnD,sCAAsC;QACxC,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC;iBAC9B,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,CAAC,+BAA+B,CAAC;YAC5C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;iBACf,QAAQ,CAAC,8CAA8C,CAAC;YAC3D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;iBACd,QAAQ,EAAE;iBACV,QAAQ,CAAC,8CAA8C,CAAC;YAC3D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;iBACnB,GAAG,EAAE;iBACL,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,KAAK,CAAC;iBACV,QAAQ,EAAE;iBACV,OAAO,CAAC,KAAK,CAAC;iBACd,QAAQ,CAAC,oEAAoE,CAAC;YACjF,uBAAuB,EAAE,CAAC,CAAC,IAAI,CAAC;gBAC9B,sBAAsB;gBACtB,yBAAyB;gBACzB,uBAAuB;aACxB,CAAC;iBACC,QAAQ,EAAE;iBACV,QAAQ,CAAC,wFAAwF,CAAC;SACtG;QACD,YAAY,EAAE;YACZ,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;YACnB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;SACrB;KACF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,uBAAuB,EAAE,EAAE,EAAE;QACvE,IAAI,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE;gBAC1C,KAAK;gBACL,UAAU,EAAE,MAAM,CAAC,MAAM;gBACzB,qBAAqB,EAAE,uBAAuB;aAC/C,CAAC,CAAC;YAEH,mEAAmE;YACnE,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,MAAa,CAAC,CAAC;YAEzD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC;gBACnD,MAAM,EAAE,QAAe;gBACvB,MAAM;gBACN,KAAK,EAAE,KAAK,IAAI,sBAAsB;gBACtC,SAAS,EAAE,UAAU;gBACrB,qBAAqB,EAAE,uBAAuB;aAC/C,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC;gBACvC,iBAAiB,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;aACtD,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,SAAS,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ToolContext } from './types.js';
2
+ export declare function register(ctx: ToolContext): void;
3
+ //# sourceMappingURL=register-chat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-chat.d.ts","sourceRoot":"","sources":["../../src/tools/register-chat.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAgB,QAAQ,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAwE/C"}
@@ -0,0 +1,71 @@
1
+ import * as z from 'zod';
2
+ import logger from '../utils/logger.js';
3
+ import { createToolResult } from '../utils/error-handler.js';
4
+ import { toolError } from '../utils/tool-wrapper.js';
5
+ export function register(ctx) {
6
+ ctx.server.registerTool('gemini_chat', {
7
+ title: 'Gemini Chat',
8
+ description: 'Chat with Google Gemini models',
9
+ inputSchema: {
10
+ message: z.string().describe('The message to send'),
11
+ model: z.string()
12
+ .optional()
13
+ .describe('Model to use (defaults to latest available)'),
14
+ temperature: z.number()
15
+ .min(0.0)
16
+ .max(1.0)
17
+ .optional()
18
+ .default(0.7)
19
+ .describe('Controls randomness (0.0 to 1.0)'),
20
+ max_tokens: z.number()
21
+ .int()
22
+ .min(1)
23
+ .max(65536)
24
+ .optional()
25
+ .default(65536)
26
+ .describe('Maximum tokens in response'),
27
+ system_prompt: z.string()
28
+ .optional()
29
+ .describe('Optional system instruction'),
30
+ grounding: z.boolean()
31
+ .optional()
32
+ .default(true)
33
+ .describe('Enable Google Search grounding for real-time information'),
34
+ thinking_level: z.enum(['low', 'medium', 'high', 'minimal'])
35
+ .optional()
36
+ .describe('Thinking depth for Gemini 3 models only. ' +
37
+ '"low" minimises latency for simple tasks. ' +
38
+ '"high" (default for Gemini 3) maximises reasoning depth. ' +
39
+ '"medium"/"minimal" available on Gemini 3 Flash only. ' +
40
+ 'Ignored for non-Gemini-3 models.')
41
+ },
42
+ outputSchema: {
43
+ content: z.string(),
44
+ success: z.boolean()
45
+ }
46
+ }, async ({ message, model, temperature, max_tokens, system_prompt, grounding, thinking_level }) => {
47
+ try {
48
+ logger.info('Executing gemini_chat tool', {
49
+ model,
50
+ messageLength: message.length
51
+ });
52
+ const response = await ctx.geminiService.chat({
53
+ message,
54
+ model,
55
+ temperature,
56
+ maxTokens: max_tokens,
57
+ systemPrompt: system_prompt,
58
+ grounding,
59
+ thinkingLevel: thinking_level,
60
+ });
61
+ return {
62
+ content: createToolResult(true, response.content),
63
+ structuredContent: { content: response.content, success: true }
64
+ };
65
+ }
66
+ catch (error) {
67
+ return toolError('gemini_chat', error);
68
+ }
69
+ });
70
+ }
71
+ //# sourceMappingURL=register-chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-chat.js","sourceRoot":"","sources":["../../src/tools/register-chat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAGrD,MAAM,UAAU,QAAQ,CAAC,GAAgB;IACvC,GAAG,CAAC,MAAM,CAAC,YAAY,CACrB,aAAa,EACb;QACE,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,gCAAgC;QAC7C,WAAW,EAAE;YACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YACnD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;iBACd,QAAQ,EAAE;iBACV,QAAQ,CAAC,6CAA6C,CAAC;YAC1D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;iBACpB,GAAG,CAAC,GAAG,CAAC;iBACR,GAAG,CAAC,GAAG,CAAC;iBACR,QAAQ,EAAE;iBACV,OAAO,CAAC,GAAG,CAAC;iBACZ,QAAQ,CAAC,kCAAkC,CAAC;YAC/C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;iBACnB,GAAG,EAAE;iBACL,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,KAAK,CAAC;iBACV,QAAQ,EAAE;iBACV,OAAO,CAAC,KAAK,CAAC;iBACd,QAAQ,CAAC,4BAA4B,CAAC;YACzC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;iBACtB,QAAQ,EAAE;iBACV,QAAQ,CAAC,6BAA6B,CAAC;YAC1C,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE;iBACnB,QAAQ,EAAE;iBACV,OAAO,CAAC,IAAI,CAAC;iBACb,QAAQ,CAAC,0DAA0D,CAAC;YACvE,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;iBACzD,QAAQ,EAAE;iBACV,QAAQ,CACP,2CAA2C;gBAC3C,4CAA4C;gBAC5C,2DAA2D;gBAC3D,uDAAuD;gBACvD,kCAAkC,CACnC;SACJ;QACD,YAAY,EAAE;YACZ,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;YACnB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;SACrB;KACF,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,cAAc,EAAE,EAAE,EAAE;QAC9F,IAAI,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE;gBACxC,KAAK;gBACL,aAAa,EAAE,OAAO,CAAC,MAAM;aAC9B,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC;gBAC5C,OAAO;gBACP,KAAK;gBACL,WAAW;gBACX,SAAS,EAAE,UAAU;gBACrB,YAAY,EAAE,aAAa;gBAC3B,SAAS;gBACT,aAAa,EAAE,cAAqB;aACrC,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC;gBACjD,iBAAiB,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;aAChE,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,SAAS,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QACzC,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ToolContext } from './types.js';
2
+ export declare function register(ctx: ToolContext): void;
3
+ //# sourceMappingURL=register-deep-research.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-deep-research.d.ts","sourceRoot":"","sources":["../../src/tools/register-deep-research.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAgB,QAAQ,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CA6D/C"}