@portel/photon 1.17.6 → 1.19.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 (194) hide show
  1. package/dist/auto-ui/beam/photon-management.d.ts.map +1 -1
  2. package/dist/auto-ui/beam/photon-management.js +28 -1
  3. package/dist/auto-ui/beam/photon-management.js.map +1 -1
  4. package/dist/auto-ui/beam/routes/api-marketplace.d.ts.map +1 -1
  5. package/dist/auto-ui/beam/routes/api-marketplace.js +10 -5
  6. package/dist/auto-ui/beam/routes/api-marketplace.js.map +1 -1
  7. package/dist/auto-ui/beam.d.ts.map +1 -1
  8. package/dist/auto-ui/beam.js +14 -4
  9. package/dist/auto-ui/beam.js.map +1 -1
  10. package/dist/auto-ui/streamable-http-transport.d.ts.map +1 -1
  11. package/dist/auto-ui/streamable-http-transport.js +259 -88
  12. package/dist/auto-ui/streamable-http-transport.js.map +1 -1
  13. package/dist/auto-ui/types.d.ts +2 -0
  14. package/dist/auto-ui/types.d.ts.map +1 -1
  15. package/dist/auto-ui/types.js +5 -0
  16. package/dist/auto-ui/types.js.map +1 -1
  17. package/dist/beam-form.bundle.js +5 -3
  18. package/dist/beam-form.bundle.js.map +2 -2
  19. package/dist/beam.bundle.js +912 -59
  20. package/dist/beam.bundle.js.map +3 -3
  21. package/dist/claude-code-plugin.js +1 -1
  22. package/dist/cli/commands/beam.d.ts.map +1 -1
  23. package/dist/cli/commands/beam.js +8 -2
  24. package/dist/cli/commands/beam.js.map +1 -1
  25. package/dist/cli/commands/changelog.d.ts +9 -0
  26. package/dist/cli/commands/changelog.d.ts.map +1 -0
  27. package/dist/cli/commands/changelog.js +133 -0
  28. package/dist/cli/commands/changelog.js.map +1 -0
  29. package/dist/cli/commands/maker.d.ts.map +1 -1
  30. package/dist/cli/commands/maker.js +23 -2
  31. package/dist/cli/commands/maker.js.map +1 -1
  32. package/dist/cli/commands/mcp.d.ts.map +1 -1
  33. package/dist/cli/commands/mcp.js +53 -0
  34. package/dist/cli/commands/mcp.js.map +1 -1
  35. package/dist/cli/commands/package.d.ts.map +1 -1
  36. package/dist/cli/commands/package.js +18 -2
  37. package/dist/cli/commands/package.js.map +1 -1
  38. package/dist/cli/commands/run.d.ts.map +1 -1
  39. package/dist/cli/commands/run.js +1 -0
  40. package/dist/cli/commands/run.js.map +1 -1
  41. package/dist/cli/commands/update.d.ts +3 -2
  42. package/dist/cli/commands/update.d.ts.map +1 -1
  43. package/dist/cli/commands/update.js +50 -43
  44. package/dist/cli/commands/update.js.map +1 -1
  45. package/dist/cli/index.d.ts.map +1 -1
  46. package/dist/cli/index.js +16 -2
  47. package/dist/cli/index.js.map +1 -1
  48. package/dist/cli-alias.js +1 -1
  49. package/dist/cli-alias.js.map +1 -1
  50. package/dist/context-store.d.ts +23 -33
  51. package/dist/context-store.d.ts.map +1 -1
  52. package/dist/context-store.js +147 -97
  53. package/dist/context-store.js.map +1 -1
  54. package/dist/context.d.ts +15 -10
  55. package/dist/context.d.ts.map +1 -1
  56. package/dist/context.js +37 -13
  57. package/dist/context.js.map +1 -1
  58. package/dist/daemon/server.js +4 -2
  59. package/dist/daemon/server.js.map +1 -1
  60. package/dist/data-migration.d.ts +27 -0
  61. package/dist/data-migration.d.ts.map +1 -0
  62. package/dist/data-migration.js +307 -0
  63. package/dist/data-migration.js.map +1 -0
  64. package/dist/editor-support/docblock-tag-catalog.d.ts.map +1 -1
  65. package/dist/editor-support/docblock-tag-catalog.js +6 -0
  66. package/dist/editor-support/docblock-tag-catalog.js.map +1 -1
  67. package/dist/loader.d.ts +10 -0
  68. package/dist/loader.d.ts.map +1 -1
  69. package/dist/loader.js +106 -20
  70. package/dist/loader.js.map +1 -1
  71. package/dist/marketplace-manager.d.ts.map +1 -1
  72. package/dist/marketplace-manager.js +25 -5
  73. package/dist/marketplace-manager.js.map +1 -1
  74. package/dist/photon-cli-runner.d.ts.map +1 -1
  75. package/dist/photon-cli-runner.js +56 -19
  76. package/dist/photon-cli-runner.js.map +1 -1
  77. package/dist/photon-doc-extractor.d.ts +1 -0
  78. package/dist/photon-doc-extractor.d.ts.map +1 -1
  79. package/dist/photon-doc-extractor.js +6 -0
  80. package/dist/photon-doc-extractor.js.map +1 -1
  81. package/dist/readme-syncer.d.ts.map +1 -1
  82. package/dist/readme-syncer.js +6 -1
  83. package/dist/readme-syncer.js.map +1 -1
  84. package/dist/server.d.ts +40 -0
  85. package/dist/server.d.ts.map +1 -1
  86. package/dist/server.js +298 -29
  87. package/dist/server.js.map +1 -1
  88. package/dist/shared/audit.js +4 -4
  89. package/dist/shared/audit.js.map +1 -1
  90. package/dist/tasks/executor.d.ts +47 -0
  91. package/dist/tasks/executor.d.ts.map +1 -0
  92. package/dist/tasks/executor.js +180 -0
  93. package/dist/tasks/executor.js.map +1 -0
  94. package/dist/tasks/store.d.ts +13 -6
  95. package/dist/tasks/store.d.ts.map +1 -1
  96. package/dist/tasks/store.js +56 -11
  97. package/dist/tasks/store.js.map +1 -1
  98. package/dist/tasks/types.d.ts +23 -2
  99. package/dist/tasks/types.d.ts.map +1 -1
  100. package/dist/tasks/types.js +23 -3
  101. package/dist/tasks/types.js.map +1 -1
  102. package/dist/version-notify.d.ts +27 -0
  103. package/dist/version-notify.d.ts.map +1 -0
  104. package/dist/version-notify.js +142 -0
  105. package/dist/version-notify.js.map +1 -0
  106. package/package.json +5 -4
  107. package/dist/auto-ui/bridge/openai-shim.d.ts +0 -20
  108. package/dist/auto-ui/bridge/openai-shim.d.ts.map +0 -1
  109. package/dist/auto-ui/bridge/openai-shim.js +0 -231
  110. package/dist/auto-ui/bridge/openai-shim.js.map +0 -1
  111. package/dist/auto-ui/bridge/photon-app.d.ts +0 -162
  112. package/dist/auto-ui/bridge/photon-app.d.ts.map +0 -1
  113. package/dist/auto-ui/bridge/photon-app.js +0 -460
  114. package/dist/auto-ui/bridge/photon-app.js.map +0 -1
  115. package/dist/auto-ui/daemon-tools.d.ts +0 -45
  116. package/dist/auto-ui/daemon-tools.d.ts.map +0 -1
  117. package/dist/auto-ui/daemon-tools.js +0 -581
  118. package/dist/auto-ui/daemon-tools.js.map +0 -1
  119. package/dist/auto-ui/design-system/index.d.ts +0 -21
  120. package/dist/auto-ui/design-system/index.d.ts.map +0 -1
  121. package/dist/auto-ui/design-system/index.js +0 -27
  122. package/dist/auto-ui/design-system/index.js.map +0 -1
  123. package/dist/auto-ui/design-system/transaction-ui.d.ts +0 -70
  124. package/dist/auto-ui/design-system/transaction-ui.d.ts.map +0 -1
  125. package/dist/auto-ui/design-system/transaction-ui.js +0 -982
  126. package/dist/auto-ui/design-system/transaction-ui.js.map +0 -1
  127. package/dist/auto-ui/playground-server.d.ts +0 -7
  128. package/dist/auto-ui/playground-server.d.ts.map +0 -1
  129. package/dist/auto-ui/playground-server.js +0 -840
  130. package/dist/auto-ui/playground-server.js.map +0 -1
  131. package/dist/auto-ui/rendering/components.d.ts +0 -29
  132. package/dist/auto-ui/rendering/components.d.ts.map +0 -1
  133. package/dist/auto-ui/rendering/components.js +0 -1341
  134. package/dist/auto-ui/rendering/components.js.map +0 -1
  135. package/dist/auto-ui/rendering/field-analyzer.d.ts +0 -104
  136. package/dist/auto-ui/rendering/field-analyzer.d.ts.map +0 -1
  137. package/dist/auto-ui/rendering/field-analyzer.js +0 -447
  138. package/dist/auto-ui/rendering/field-analyzer.js.map +0 -1
  139. package/dist/auto-ui/rendering/field-renderers.d.ts +0 -64
  140. package/dist/auto-ui/rendering/field-renderers.d.ts.map +0 -1
  141. package/dist/auto-ui/rendering/field-renderers.js +0 -317
  142. package/dist/auto-ui/rendering/field-renderers.js.map +0 -1
  143. package/dist/auto-ui/rendering/index.d.ts +0 -28
  144. package/dist/auto-ui/rendering/index.d.ts.map +0 -1
  145. package/dist/auto-ui/rendering/index.js +0 -60
  146. package/dist/auto-ui/rendering/index.js.map +0 -1
  147. package/dist/auto-ui/rendering/layout-selector.d.ts +0 -60
  148. package/dist/auto-ui/rendering/layout-selector.d.ts.map +0 -1
  149. package/dist/auto-ui/rendering/layout-selector.js +0 -476
  150. package/dist/auto-ui/rendering/layout-selector.js.map +0 -1
  151. package/dist/markdown-utils.d.ts +0 -8
  152. package/dist/markdown-utils.d.ts.map +0 -1
  153. package/dist/markdown-utils.js +0 -64
  154. package/dist/markdown-utils.js.map +0 -1
  155. package/dist/mcp-client.d.ts +0 -9
  156. package/dist/mcp-client.d.ts.map +0 -1
  157. package/dist/mcp-client.js +0 -11
  158. package/dist/mcp-client.js.map +0 -1
  159. package/dist/mcp-elicitation.d.ts +0 -32
  160. package/dist/mcp-elicitation.d.ts.map +0 -1
  161. package/dist/mcp-elicitation.js +0 -26
  162. package/dist/mcp-elicitation.js.map +0 -1
  163. package/dist/photons/builder-compass.photon.d.ts +0 -167
  164. package/dist/photons/builder-compass.photon.d.ts.map +0 -1
  165. package/dist/photons/builder-compass.photon.js +0 -816
  166. package/dist/photons/builder-compass.photon.js.map +0 -1
  167. package/dist/photons/builder-compass.photon.ts +0 -1129
  168. package/dist/photons/docs/ui/docs.html +0 -441
  169. package/dist/photons/docs.photon.d.ts +0 -237
  170. package/dist/photons/docs.photon.d.ts.map +0 -1
  171. package/dist/photons/docs.photon.js +0 -483
  172. package/dist/photons/docs.photon.js.map +0 -1
  173. package/dist/photons/docs.photon.ts +0 -536
  174. package/dist/photons/slides.photon.d.ts +0 -212
  175. package/dist/photons/slides.photon.d.ts.map +0 -1
  176. package/dist/photons/slides.photon.js +0 -355
  177. package/dist/photons/slides.photon.js.map +0 -1
  178. package/dist/photons/slides.photon.ts +0 -370
  179. package/dist/photons/spreadsheet/ui/spreadsheet.html +0 -779
  180. package/dist/photons/spreadsheet.photon.d.ts +0 -554
  181. package/dist/photons/spreadsheet.photon.d.ts.map +0 -1
  182. package/dist/photons/spreadsheet.photon.js +0 -1050
  183. package/dist/photons/spreadsheet.photon.js.map +0 -1
  184. package/dist/photons/spreadsheet.photon.ts +0 -1239
  185. package/dist/photons/ui/builder-compass.html +0 -1199
  186. package/dist/photons/ui/builder-compass.photon.html +0 -380
  187. package/dist/security-scanner.d.ts +0 -52
  188. package/dist/security-scanner.d.ts.map +0 -1
  189. package/dist/security-scanner.js +0 -181
  190. package/dist/security-scanner.js.map +0 -1
  191. package/dist/shared/performance.d.ts +0 -65
  192. package/dist/shared/performance.d.ts.map +0 -1
  193. package/dist/shared/performance.js +0 -136
  194. package/dist/shared/performance.js.map +0 -1
@@ -1,476 +0,0 @@
1
- /**
2
- * Layout Selector - Auto-detect best layout for data
3
- *
4
- * Determines the optimal component/layout to render data based on:
5
- * 1. Explicit @format annotation (highest priority)
6
- * 2. Data shape (array vs object vs primitive)
7
- * 3. Data content (has images -> grid, charts -> chart, etc.)
8
- */
9
- import { isChartShaped, isMetricShaped, isGaugeShaped, isTimelineShaped, isDashboardShaped, isCartShaped, } from './field-analyzer.js';
10
- // Map legacy @format values to new layout types
11
- const FORMAT_TO_LAYOUT = {
12
- table: 'list', // table -> list (smart rendering)
13
- list: 'list',
14
- grid: 'grid',
15
- card: 'card',
16
- kv: 'kv',
17
- tree: 'tree',
18
- json: 'json',
19
- markdown: 'markdown',
20
- mermaid: 'mermaid',
21
- code: 'code',
22
- text: 'text',
23
- primitive: 'text',
24
- chips: 'chips',
25
- html: 'html',
26
- chart: 'chart',
27
- metric: 'metric',
28
- gauge: 'gauge',
29
- timeline: 'timeline',
30
- dashboard: 'dashboard',
31
- cart: 'cart',
32
- panels: 'panels',
33
- tabs: 'tabs',
34
- accordion: 'accordion',
35
- stack: 'stack',
36
- columns: 'columns',
37
- };
38
- /**
39
- * Select the best layout type for given data
40
- */
41
- export function selectLayout(data, format, hints) {
42
- // 1. Explicit format takes precedence (backward compat)
43
- if (format) {
44
- // Handle code:language format
45
- if (format.startsWith('code:'))
46
- return 'code';
47
- // Handle chart:subtype format (e.g., chart:bar, chart:pie)
48
- if (format.startsWith('chart:'))
49
- return 'chart';
50
- const layout = FORMAT_TO_LAYOUT[format] || 'json';
51
- // Smart fallback: if list/table format but data is not an array, use card
52
- if ((layout === 'list' || format === 'table') &&
53
- !Array.isArray(data) &&
54
- typeof data === 'object' &&
55
- data !== null) {
56
- return 'card';
57
- }
58
- return layout;
59
- }
60
- // 2. Null/undefined
61
- if (data === null || data === undefined) {
62
- return 'text';
63
- }
64
- // 3. Primitives
65
- if (typeof data === 'string') {
66
- // Check if it looks like markdown
67
- if (hasMarkdownSyntax(data))
68
- return 'markdown';
69
- // Check if it looks like mermaid
70
- if (data.trim().startsWith('graph ') || data.trim().startsWith('flowchart ')) {
71
- return 'mermaid';
72
- }
73
- return 'text';
74
- }
75
- if (typeof data === 'number' || typeof data === 'boolean') {
76
- return 'text';
77
- }
78
- // 4. Arrays
79
- if (Array.isArray(data)) {
80
- if (data.length === 0)
81
- return 'text'; // Empty array
82
- const first = data[0];
83
- // Array of strings -> chips
84
- if (typeof first === 'string') {
85
- return 'chips';
86
- }
87
- // Array of objects
88
- if (typeof first === 'object' && first !== null) {
89
- // Check if cart-shaped (before image/timeline — more specific)
90
- if (isCartShaped(data)) {
91
- return 'cart';
92
- }
93
- // Check if items have image fields -> grid
94
- if (hasImageFields(first)) {
95
- return 'grid';
96
- }
97
- // Check if timeline-shaped (before chart — more specific)
98
- if (isTimelineShaped(data)) {
99
- return 'timeline';
100
- }
101
- // Check if chart-shaped (date+numbers or label+value pairs)
102
- if (isChartShaped(data)) {
103
- return 'chart';
104
- }
105
- // Default: list
106
- return 'list';
107
- }
108
- // Mixed or primitive arrays
109
- return 'chips';
110
- }
111
- // 5. Objects
112
- if (typeof data === 'object') {
113
- // Check for special fields
114
- if ('diagram' in data && typeof data.diagram === 'string') {
115
- return 'mermaid';
116
- }
117
- // Check if cart-shaped (items array with price+quantity)
118
- if (isCartShaped(data)) {
119
- return 'cart';
120
- }
121
- // Check if gauge-shaped (value + max/min or progress)
122
- if (isGaugeShaped(data)) {
123
- return 'gauge';
124
- }
125
- // Check if metric-shaped (single numeric + label)
126
- if (isMetricShaped(data)) {
127
- return 'metric';
128
- }
129
- // Check if dashboard-shaped (mix of arrays, objects, metrics)
130
- if (isDashboardShaped(data)) {
131
- return 'dashboard';
132
- }
133
- // Check if deeply nested -> tree
134
- if (isNested(data)) {
135
- return 'tree';
136
- }
137
- // Flat object -> card (or kv for many fields)
138
- const fieldCount = Object.keys(data).length;
139
- if (fieldCount > 10) {
140
- return 'kv'; // Too many fields for card
141
- }
142
- return 'card';
143
- }
144
- // Fallback
145
- return 'json';
146
- }
147
- /**
148
- * Check if object has fields that look like actual images (not just icon characters)
149
- * We need to verify the VALUE looks like an image URL, not just the field name
150
- */
151
- export function hasImageFields(obj) {
152
- const imageFieldNames = /^(image|photo|thumbnail|picture|poster|cover)$/i;
153
- const avatarFieldName = /^(avatar)$/i;
154
- const imageUrlPattern = /\.(jpg|jpeg|png|gif|webp|svg)(\?.*)?$/i;
155
- const dataUrlPattern = /^data:image\//i;
156
- for (const [key, value] of Object.entries(obj)) {
157
- // Skip non-string values
158
- if (typeof value !== 'string')
159
- continue;
160
- // Check for image URL patterns in value
161
- if (imageUrlPattern.test(value) || dataUrlPattern.test(value))
162
- return true;
163
- // For image field names (not avatar), check if value looks like a URL
164
- if (imageFieldNames.test(key) && (value.startsWith('http') || value.startsWith('/'))) {
165
- return true;
166
- }
167
- // For avatar fields specifically, only treat as image if it's actually a URL
168
- // Single characters or short strings are icons, not images
169
- if (avatarFieldName.test(key) &&
170
- value.length > 10 &&
171
- (value.startsWith('http') || value.startsWith('/'))) {
172
- return true;
173
- }
174
- }
175
- return false;
176
- }
177
- /**
178
- * Check if object is nested (has object/array values)
179
- */
180
- export function isNested(obj, depth = 0) {
181
- if (depth > 2)
182
- return true; // Max depth check
183
- for (const value of Object.values(obj)) {
184
- if (Array.isArray(value) && value.length > 0 && typeof value[0] === 'object') {
185
- return true;
186
- }
187
- if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
188
- if (isNested(value, depth + 1))
189
- return true;
190
- }
191
- }
192
- return false;
193
- }
194
- /**
195
- * Check if string contains markdown syntax
196
- */
197
- export function hasMarkdownSyntax(text) {
198
- // Check for common markdown patterns
199
- const patterns = [
200
- /^#{1,6}\s/m, // Headers
201
- /\*\*[^*]+\*\*/, // Bold
202
- /\*[^*]+\*/, // Italic
203
- /\[[^\]]+\]\([^)]+\)/, // Links
204
- /```[\s\S]*```/, // Code blocks
205
- /^\s*[-*+]\s/m, // Lists
206
- /^\s*\d+\.\s/m, // Numbered lists
207
- ];
208
- return patterns.some((p) => p.test(text));
209
- }
210
- /**
211
- * Parse layout hints from nested JSDoc syntax
212
- * Example: {@title name, @subtitle email, @style inset}
213
- */
214
- export function parseLayoutHints(hintsString) {
215
- const hints = {};
216
- if (!hintsString)
217
- return hints;
218
- // Split by comma and parse each hint
219
- const parts = hintsString.split(',').map((s) => s.trim());
220
- for (const part of parts) {
221
- // Match @key value or @key value:renderer
222
- const match = part.match(/@(\w+)\s+([^:]+)(?::(\w+))?/);
223
- if (match) {
224
- const [, key, value, renderer] = match;
225
- const cleanValue = value.trim();
226
- switch (key) {
227
- case 'title':
228
- hints.title = cleanValue;
229
- break;
230
- case 'subtitle':
231
- hints.subtitle = cleanValue;
232
- break;
233
- case 'icon':
234
- hints.icon = cleanValue;
235
- break;
236
- case 'badge':
237
- hints.badge = cleanValue;
238
- break;
239
- case 'detail':
240
- hints.detail = cleanValue;
241
- break;
242
- case 'image':
243
- hints.image = cleanValue;
244
- break;
245
- case 'style':
246
- hints.style = cleanValue;
247
- break;
248
- case 'accessory':
249
- hints.accessory = cleanValue;
250
- break;
251
- case 'columns':
252
- hints.columns = parseInt(cleanValue, 10);
253
- break;
254
- case 'fields':
255
- hints.fields = cleanValue.split(/\s+/);
256
- break;
257
- // Chart hints
258
- case 'label':
259
- hints.label = cleanValue;
260
- break;
261
- case 'value':
262
- hints.value = cleanValue;
263
- break;
264
- case 'x':
265
- hints.x = cleanValue;
266
- break;
267
- case 'y':
268
- hints.y = cleanValue;
269
- break;
270
- case 'series':
271
- hints.series = cleanValue;
272
- break;
273
- case 'chartType':
274
- hints.chartType = cleanValue;
275
- break;
276
- // Gauge hints
277
- case 'min':
278
- hints.min = parseFloat(cleanValue);
279
- break;
280
- case 'max':
281
- hints.max = parseFloat(cleanValue);
282
- break;
283
- // Timeline hints
284
- case 'date':
285
- hints.date = cleanValue;
286
- break;
287
- case 'description':
288
- hints.description = cleanValue;
289
- break;
290
- // Dashboard/grouping hints
291
- case 'group':
292
- hints.group = cleanValue;
293
- break;
294
- // Composable container hints
295
- case 'inner':
296
- hints.inner = cleanValue;
297
- break;
298
- }
299
- }
300
- }
301
- return hints;
302
- }
303
- /**
304
- * Generate JavaScript code for layout selector (to embed in HTML)
305
- */
306
- export function generateLayoutSelectorJS() {
307
- return `
308
- // Layout Selector - Auto-detect best layout for data
309
- const FORMAT_TO_LAYOUT = {
310
- 'table': 'list',
311
- 'list': 'list',
312
- 'grid': 'grid',
313
- 'card': 'card',
314
- 'kv': 'kv',
315
- 'tree': 'tree',
316
- 'json': 'json',
317
- 'markdown': 'markdown',
318
- 'mermaid': 'mermaid',
319
- 'code': 'code',
320
- 'text': 'text',
321
- 'primitive': 'text',
322
- 'chips': 'chips',
323
- 'html': 'html',
324
- 'chart': 'chart',
325
- 'metric': 'metric',
326
- 'gauge': 'gauge',
327
- 'timeline': 'timeline',
328
- 'dashboard': 'dashboard',
329
- 'cart': 'cart',
330
- 'panels': 'panels',
331
- 'tabs': 'tabs',
332
- 'accordion': 'accordion',
333
- 'stack': 'stack',
334
- 'columns': 'columns',
335
- };
336
-
337
- function selectLayout(data, format, hints) {
338
- if (format) {
339
- if (format.startsWith('code:')) return 'code';
340
- if (format.startsWith('chart:')) return 'chart';
341
- var layout = FORMAT_TO_LAYOUT[format] || 'json';
342
- // Smart fallback: if list/table format but data is not an array, use card
343
- if ((layout === 'list' || format === 'table') && !Array.isArray(data) && typeof data === 'object' && data !== null) {
344
- return 'card';
345
- }
346
- return layout;
347
- }
348
-
349
- if (data === null || data === undefined) return 'text';
350
-
351
- if (typeof data === 'string') {
352
- if (hasMarkdownSyntax(data)) return 'markdown';
353
- if (data.trim().startsWith('graph ') || data.trim().startsWith('flowchart ')) {
354
- return 'mermaid';
355
- }
356
- return 'text';
357
- }
358
-
359
- if (typeof data === 'number' || typeof data === 'boolean') return 'text';
360
-
361
- if (Array.isArray(data)) {
362
- if (data.length === 0) return 'text';
363
- const first = data[0];
364
- if (typeof first === 'string') return 'chips';
365
- if (typeof first === 'object' && first !== null) {
366
- if (isCartShaped(data)) return 'cart';
367
- if (hasImageFields(first)) return 'grid';
368
- return 'list';
369
- }
370
- return 'chips';
371
- }
372
-
373
- if (typeof data === 'object') {
374
- if ('diagram' in data && typeof data.diagram === 'string') return 'mermaid';
375
- if (isCartShaped(data)) return 'cart';
376
- if (isNested(data)) return 'tree';
377
- const fieldCount = Object.keys(data).length;
378
- if (fieldCount > 10) return 'kv';
379
- return 'card';
380
- }
381
-
382
- return 'json';
383
- }
384
-
385
- function hasImageFields(obj) {
386
- const imageFieldNames = /^(image|photo|thumbnail|picture|poster|cover)$/i;
387
- const avatarFieldName = /^(avatar)$/i;
388
- const imageUrlPattern = /\\.(jpg|jpeg|png|gif|webp|svg)(\\?.*)?$/i;
389
- const dataUrlPattern = /^data:image\\//i;
390
- for (const [key, value] of Object.entries(obj)) {
391
- if (typeof value !== 'string') continue;
392
- if (imageUrlPattern.test(value) || dataUrlPattern.test(value)) return true;
393
- if (imageFieldNames.test(key) && (value.startsWith('http') || value.startsWith('/'))) return true;
394
- if (avatarFieldName.test(key) && value.length > 10 && (value.startsWith('http') || value.startsWith('/'))) return true;
395
- }
396
- return false;
397
- }
398
-
399
- function isNested(obj, depth = 0) {
400
- if (depth > 2) return true;
401
- for (const value of Object.values(obj)) {
402
- if (Array.isArray(value) && value.length > 0 && typeof value[0] === 'object') return true;
403
- if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
404
- if (isNested(value, depth + 1)) return true;
405
- }
406
- }
407
- return false;
408
- }
409
-
410
- function hasMarkdownSyntax(text) {
411
- const patterns = [
412
- /^#{1,6}\\s/m,
413
- /\\*\\*[^*]+\\*\\*/,
414
- /\\*[^*]+\\*/,
415
- /\\[[^\\]]+\\]\\([^)]+\\)/,
416
- /\`\`\`[\\s\\S]*\`\`\`/,
417
- /^\\s*[-*+]\\s/m,
418
- /^\\s*\\d+\\.\\s/m,
419
- ];
420
- return patterns.some(p => p.test(text));
421
- }
422
-
423
- function parseLayoutHints(hintsString) {
424
- const hints = {};
425
- if (!hintsString) return hints;
426
- const parts = hintsString.split(',').map(s => s.trim());
427
- for (const part of parts) {
428
- const match = part.match(/@(\\w+)\\s+([^:]+)(?::(\\w+))?/);
429
- if (match) {
430
- const [, key, value, renderer] = match;
431
- const cleanValue = value.trim();
432
- switch (key) {
433
- case 'title': hints.title = cleanValue; break;
434
- case 'subtitle': hints.subtitle = cleanValue; break;
435
- case 'icon': hints.icon = cleanValue; break;
436
- case 'badge': hints.badge = cleanValue; break;
437
- case 'detail': hints.detail = cleanValue; break;
438
- case 'image': hints.image = cleanValue; break;
439
- case 'style': hints.style = cleanValue; break;
440
- case 'accessory': hints.accessory = cleanValue; break;
441
- case 'columns': hints.columns = parseInt(cleanValue, 10); break;
442
- case 'fields': hints.fields = cleanValue.split(/\\s+/); break;
443
- case 'label': hints.label = cleanValue; break;
444
- case 'value': hints.value = cleanValue; break;
445
- case 'x': hints.x = cleanValue; break;
446
- case 'y': hints.y = cleanValue; break;
447
- case 'series': hints.series = cleanValue; break;
448
- case 'chartType': hints.chartType = cleanValue; break;
449
- case 'min': hints.min = parseFloat(cleanValue); break;
450
- case 'max': hints.max = parseFloat(cleanValue); break;
451
- case 'date': hints.date = cleanValue; break;
452
- case 'description': hints.description = cleanValue; break;
453
- case 'group': hints.group = cleanValue; break;
454
- case 'inner': hints.inner = cleanValue; break;
455
- }
456
- }
457
- }
458
- return hints;
459
- }
460
-
461
- function isCartShaped(data) {
462
- if (Array.isArray(data)) {
463
- return data.length > 0 && data.every(function(item) {
464
- return item && typeof item === 'object' && 'price' in item && ('quantity' in item || 'qty' in item);
465
- });
466
- }
467
- if (data && typeof data === 'object' && data.items && Array.isArray(data.items)) {
468
- return data.items.length > 0 && data.items.every(function(item) {
469
- return item && typeof item === 'object' && 'price' in item && ('quantity' in item || 'qty' in item);
470
- });
471
- }
472
- return false;
473
- }
474
- `;
475
- }
476
- //# sourceMappingURL=layout-selector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"layout-selector.js","sourceRoot":"","sources":["../../../src/auto-ui/rendering/layout-selector.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- /**
2
- * Simple and safe markdown utilities for browser use
3
- * Avoids complex regex that might cause escaping issues
4
- */
5
- export declare function simpleMarkdownToHtml(markdown: string): string;
6
- export declare function escapeHtml(text: string): string;
7
- export declare const markdownUtilsScript = "\nfunction simpleMarkdownToHtml(markdown) {\n if (!markdown) return '';\n \n let html = markdown;\n \n // Escape HTML first\n const div = document.createElement('div');\n div.textContent = html;\n html = div.innerHTML;\n \n // Bold\n html = html.replace(/\\*\\*(.+?)\\*\\*/g, '<strong>$1</strong>');\n html = html.replace(/__(.+?)__/g, '<strong>$1</strong>');\n \n // Italic\n html = html.replace(/\\*(.+?)\\*/g, '<em>$1</em>');\n html = html.replace(/_(.+?)_/g, '<em>$1</em>');\n \n // Code\n html = html.replace(/`([^`]+)`/g, '<code>$1</code>');\n \n // Links: simpler approach\n html = html.replace(/\\[([^\\]]+)\\]\\(([^)]+)\\)/g, '<a href=\"$2\" target=\"_blank\">$1</a>');\n \n // Line breaks\n html = html.replace(/\\n/g, '<br>');\n \n return html;\n}\n";
8
- //# sourceMappingURL=markdown-utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"markdown-utils.d.ts","sourceRoot":"","sources":["../src/markdown-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAwB7D;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO/C;AAGD,eAAO,MAAM,mBAAmB,wxBA8B/B,CAAC"}
@@ -1,64 +0,0 @@
1
- /**
2
- * Simple and safe markdown utilities for browser use
3
- * Avoids complex regex that might cause escaping issues
4
- */
5
- export function simpleMarkdownToHtml(markdown) {
6
- if (!markdown)
7
- return '';
8
- // Security: escape HTML first to prevent XSS, then apply markdown formatting
9
- let html = escapeHtml(markdown);
10
- // Bold: **text** or __text__
11
- html = html.replace(/\*\*(.+?)\*\*/g, '<strong>$1</strong>');
12
- html = html.replace(/__(.+?)__/g, '<strong>$1</strong>');
13
- // Italic: *text* or _text_
14
- html = html.replace(/\*(.+?)\*/g, '<em>$1</em>');
15
- html = html.replace(/_(.+?)_/g, '<em>$1</em>');
16
- // Code: `code`
17
- html = html.replace(/`([^`]+)`/g, '<code>$1</code>');
18
- // Links: [text](url)
19
- html = html.replace(/\[([^\]]+)\]\(([^)]+)\)/g, '<a href="$2" target="_blank">$1</a>');
20
- // Line breaks
21
- html = html.replace(/\n/g, '<br>');
22
- return html;
23
- }
24
- export function escapeHtml(text) {
25
- return text
26
- .replace(/&/g, '&amp;')
27
- .replace(/</g, '&lt;')
28
- .replace(/>/g, '&gt;')
29
- .replace(/"/g, '&quot;')
30
- .replace(/'/g, '&#039;');
31
- }
32
- // Export as string for embedding in HTML templates
33
- export const markdownUtilsScript = `
34
- function simpleMarkdownToHtml(markdown) {
35
- if (!markdown) return '';
36
-
37
- let html = markdown;
38
-
39
- // Escape HTML first
40
- const div = document.createElement('div');
41
- div.textContent = html;
42
- html = div.innerHTML;
43
-
44
- // Bold
45
- html = html.replace(/\\*\\*(.+?)\\*\\*/g, '<strong>$1</strong>');
46
- html = html.replace(/__(.+?)__/g, '<strong>$1</strong>');
47
-
48
- // Italic
49
- html = html.replace(/\\*(.+?)\\*/g, '<em>$1</em>');
50
- html = html.replace(/_(.+?)_/g, '<em>$1</em>');
51
-
52
- // Code
53
- html = html.replace(/\`([^\`]+)\`/g, '<code>$1</code>');
54
-
55
- // Links: simpler approach
56
- html = html.replace(/\\[([^\\]]+)\\]\\(([^)]+)\\)/g, '<a href="$2" target="_blank">$1</a>');
57
-
58
- // Line breaks
59
- html = html.replace(/\\n/g, '<br>');
60
-
61
- return html;
62
- }
63
- `;
64
- //# sourceMappingURL=markdown-utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"markdown-utils.js","sourceRoot":"","sources":["../src/markdown-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACnD,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IAEzB,6EAA6E;IAC7E,IAAI,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAEhC,6BAA6B;IAC7B,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,CAAC;IAC7D,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,qBAAqB,CAAC,CAAC;IAEzD,2BAA2B;IAC3B,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;IACjD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IAE/C,eAAe;IACf,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;IAErD,qBAAqB;IACrB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,0BAA0B,EAAE,qCAAqC,CAAC,CAAC;IAEvF,cAAc;IACd,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAEnC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,IAAI;SACR,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED,mDAAmD;AACnD,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BlC,CAAC"}
@@ -1,9 +0,0 @@
1
- /**
2
- * MCP Client for Photon Runtime
3
- *
4
- * Re-exports from @portel/photon-core for backward compatibility.
5
- * The SDK-based transport implementation is now in photon-core.
6
- */
7
- export { SDKMCPTransport, SDKMCPClientFactory, loadMCPConfig, createSDKMCPClientFactory, resolveMCPSource, type MCPServerConfig, type MCPConfig, } from '@portel/photon-core';
8
- export { SDKMCPTransport as StandaloneMCPTransport, SDKMCPClientFactory as StandaloneMCPClientFactory, createSDKMCPClientFactory as createStandaloneMCPClientFactory, } from '@portel/photon-core';
9
- //# sourceMappingURL=mcp-client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-client.d.ts","sourceRoot":"","sources":["../src/mcp-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,yBAAyB,EACzB,gBAAgB,EAChB,KAAK,eAAe,EACpB,KAAK,SAAS,GACf,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,eAAe,IAAI,sBAAsB,EACzC,mBAAmB,IAAI,0BAA0B,EACjD,yBAAyB,IAAI,gCAAgC,GAC9D,MAAM,qBAAqB,CAAC"}
@@ -1,11 +0,0 @@
1
- /**
2
- * MCP Client for Photon Runtime
3
- *
4
- * Re-exports from @portel/photon-core for backward compatibility.
5
- * The SDK-based transport implementation is now in photon-core.
6
- */
7
- // Re-export everything from photon-core's SDK transport
8
- export { SDKMCPTransport, SDKMCPClientFactory, loadMCPConfig, createSDKMCPClientFactory, resolveMCPSource, } from '@portel/photon-core';
9
- // Backward compatibility aliases
10
- export { SDKMCPTransport as StandaloneMCPTransport, SDKMCPClientFactory as StandaloneMCPClientFactory, createSDKMCPClientFactory as createStandaloneMCPClientFactory, } from '@portel/photon-core';
11
- //# sourceMappingURL=mcp-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../src/mcp-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,wDAAwD;AACxD,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,yBAAyB,EACzB,gBAAgB,GAGjB,MAAM,qBAAqB,CAAC;AAE7B,iCAAiC;AACjC,OAAO,EACL,eAAe,IAAI,sBAAsB,EACzC,mBAAmB,IAAI,0BAA0B,EACjD,yBAAyB,IAAI,gCAAgC,GAC9D,MAAM,qBAAqB,CAAC"}
@@ -1,32 +0,0 @@
1
- /**
2
- * MCP Elicitation Support
3
- *
4
- * Maps Photon's yield-based asks to MCP's elicitation protocol.
5
- *
6
- * As of MCP SDK 1.25, elicitation is handled via:
7
- * - Server.elicitInput() - Server requests user input from client
8
- * - Client declares { elicitation: {} } capability during initialization
9
- *
10
- * The actual integration is in server.ts:
11
- * - createMCPInputProvider() creates an input provider that uses elicitInput()
12
- * - This is passed to loader.executeTool() for generator-based tools
13
- *
14
- * @see https://forgecode.dev/blog/mcp-spec-updates/
15
- */
16
- import type { Server } from '@modelcontextprotocol/sdk/server/index.js';
17
- /**
18
- * Check if a client supports MCP elicitation
19
- *
20
- * @param server - MCP server instance
21
- * @returns true if client declared elicitation capability
22
- */
23
- export declare function clientSupportsElicitation(server: Server): boolean;
24
- /**
25
- * Elicitation action type from MCP spec
26
- */
27
- export type ElicitAction = 'accept' | 'decline' | 'cancel';
28
- /**
29
- * Re-export types for convenience
30
- */
31
- export type { ElicitResult, ElicitRequestFormParams, ElicitRequestURLParams, } from '@modelcontextprotocol/sdk/types.js';
32
- //# sourceMappingURL=mcp-elicitation.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-elicitation.d.ts","sourceRoot":"","sources":["../src/mcp-elicitation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAExE;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAGjE;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE3D;;GAEG;AACH,YAAY,EACV,YAAY,EACZ,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC"}
@@ -1,26 +0,0 @@
1
- /**
2
- * MCP Elicitation Support
3
- *
4
- * Maps Photon's yield-based asks to MCP's elicitation protocol.
5
- *
6
- * As of MCP SDK 1.25, elicitation is handled via:
7
- * - Server.elicitInput() - Server requests user input from client
8
- * - Client declares { elicitation: {} } capability during initialization
9
- *
10
- * The actual integration is in server.ts:
11
- * - createMCPInputProvider() creates an input provider that uses elicitInput()
12
- * - This is passed to loader.executeTool() for generator-based tools
13
- *
14
- * @see https://forgecode.dev/blog/mcp-spec-updates/
15
- */
16
- /**
17
- * Check if a client supports MCP elicitation
18
- *
19
- * @param server - MCP server instance
20
- * @returns true if client declared elicitation capability
21
- */
22
- export function clientSupportsElicitation(server) {
23
- const capabilities = server.getClientCapabilities();
24
- return !!capabilities?.elicitation;
25
- }
26
- //# sourceMappingURL=mcp-elicitation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-elicitation.js","sourceRoot":"","sources":["../src/mcp-elicitation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAc;IACtD,MAAM,YAAY,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;IACpD,OAAO,CAAC,CAAE,YAAoB,EAAE,WAAW,CAAC;AAC9C,CAAC"}