@portel/photon 1.16.0 → 1.16.1
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.
- package/dist/auto-ui/beam/photon-management.d.ts +1 -1
- package/dist/auto-ui/beam/photon-management.d.ts.map +1 -1
- package/dist/auto-ui/beam/photon-management.js +5 -1
- package/dist/auto-ui/beam/photon-management.js.map +1 -1
- package/dist/auto-ui/beam/routes/api-config.d.ts.map +1 -1
- package/dist/auto-ui/beam/routes/api-config.js +2 -1
- package/dist/auto-ui/beam/routes/api-config.js.map +1 -1
- package/dist/auto-ui/beam.d.ts.map +1 -1
- package/dist/auto-ui/beam.js +39 -9
- package/dist/auto-ui/beam.js.map +1 -1
- package/dist/beam.bundle.js +959 -415
- package/dist/beam.bundle.js.map +4 -4
- package/dist/claude-code-plugin.js +11 -3
- package/dist/claude-code-plugin.js.map +1 -1
- package/dist/cli/commands/build.js +1 -1
- package/dist/cli/commands/build.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +7 -5
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/info.d.ts.map +1 -1
- package/dist/cli/commands/info.js +3 -2
- package/dist/cli/commands/info.js.map +1 -1
- package/dist/cli/commands/mcp.js +2 -2
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +6 -2
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli-alias.d.ts.map +1 -1
- package/dist/cli-alias.js +3 -2
- package/dist/cli-alias.js.map +1 -1
- package/dist/daemon/worker-manager.js +1 -1
- package/dist/daemon/worker-manager.js.map +1 -1
- package/dist/deploy/cloudflare.d.ts.map +1 -1
- package/dist/deploy/cloudflare.js +10 -16
- package/dist/deploy/cloudflare.js.map +1 -1
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +3 -15
- package/dist/loader.js.map +1 -1
- package/dist/photons/builder-compass.photon.d.ts +167 -0
- package/dist/photons/builder-compass.photon.d.ts.map +1 -0
- package/dist/photons/builder-compass.photon.js +816 -0
- package/dist/photons/builder-compass.photon.js.map +1 -0
- package/dist/photons/builder-compass.photon.ts +1129 -0
- package/dist/photons/maker.photon.d.ts.map +1 -1
- package/dist/photons/maker.photon.js +19 -2
- package/dist/photons/maker.photon.js.map +1 -1
- package/dist/photons/maker.photon.ts +18 -2
- package/dist/photons/ui/builder-compass.html +1199 -0
- package/dist/photons/ui/builder-compass.photon.html +380 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +16 -2
- package/dist/server.js.map +1 -1
- package/dist/shared-utils.d.ts +13 -0
- package/dist/shared-utils.d.ts.map +1 -1
- package/dist/shared-utils.js +33 -0
- package/dist/shared-utils.js.map +1 -1
- package/dist/template-manager.d.ts.map +1 -1
- package/dist/template-manager.js +2 -1
- package/dist/template-manager.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
<style>
|
|
2
|
+
:root {
|
|
3
|
+
--canvas: #f4eddf;
|
|
4
|
+
--ink: #201d18;
|
|
5
|
+
--muted: #6c665d;
|
|
6
|
+
--olive: #38452f;
|
|
7
|
+
--sage: #6f8d62;
|
|
8
|
+
--amber: #ba7c33;
|
|
9
|
+
--rust: #9d5a42;
|
|
10
|
+
--card: rgba(255, 251, 244, 0.92);
|
|
11
|
+
--line: rgba(68, 53, 36, 0.12);
|
|
12
|
+
--shadow: 0 18px 48px rgba(54, 38, 17, 0.1);
|
|
13
|
+
--radius-xl: 28px;
|
|
14
|
+
--radius-lg: 20px;
|
|
15
|
+
--radius-md: 16px;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
body {
|
|
19
|
+
background:
|
|
20
|
+
radial-gradient(circle at top left, rgba(111, 141, 98, 0.14), transparent 24%),
|
|
21
|
+
radial-gradient(circle at top right, rgba(186, 124, 51, 0.12), transparent 20%),
|
|
22
|
+
linear-gradient(180deg, #f8f1e7 0%, var(--canvas) 44%, #ecdfcb 100%);
|
|
23
|
+
color: var(--ink);
|
|
24
|
+
font-family: 'Inter', system-ui, sans-serif;
|
|
25
|
+
padding: 24px;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.shell {
|
|
29
|
+
display: grid;
|
|
30
|
+
gap: 18px;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.hero,
|
|
34
|
+
.grid {
|
|
35
|
+
display: grid;
|
|
36
|
+
gap: 18px;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.hero {
|
|
40
|
+
grid-template-columns: minmax(0, 1.35fr) minmax(320px, 0.82fr);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.grid {
|
|
44
|
+
grid-template-columns: minmax(320px, 0.9fr) minmax(400px, 1.1fr) minmax(320px, 0.92fr);
|
|
45
|
+
align-items: start;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.column {
|
|
49
|
+
display: grid;
|
|
50
|
+
gap: 18px;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.panel {
|
|
54
|
+
background: linear-gradient(180deg, rgba(255, 252, 247, 0.94), rgba(249, 241, 229, 0.96));
|
|
55
|
+
border: 1px solid var(--line);
|
|
56
|
+
border-radius: var(--radius-xl);
|
|
57
|
+
box-shadow: var(--shadow);
|
|
58
|
+
padding: 22px;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.hero-main {
|
|
62
|
+
padding: 28px;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.eyebrow,
|
|
66
|
+
.pill {
|
|
67
|
+
display: inline-flex;
|
|
68
|
+
align-items: center;
|
|
69
|
+
gap: 8px;
|
|
70
|
+
border-radius: 999px;
|
|
71
|
+
font:
|
|
72
|
+
500 12px/1 ui-monospace,
|
|
73
|
+
SFMono-Regular,
|
|
74
|
+
Menlo,
|
|
75
|
+
monospace;
|
|
76
|
+
letter-spacing: 0.06em;
|
|
77
|
+
text-transform: uppercase;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.eyebrow {
|
|
81
|
+
color: var(--olive);
|
|
82
|
+
padding: 7px 12px;
|
|
83
|
+
border: 1px solid rgba(56, 69, 47, 0.14);
|
|
84
|
+
background: rgba(56, 69, 47, 0.08);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.hero-main h1 {
|
|
88
|
+
margin-top: 14px;
|
|
89
|
+
font-size: clamp(2.1rem, 5vw, 4rem);
|
|
90
|
+
line-height: 0.96;
|
|
91
|
+
font-weight: 800;
|
|
92
|
+
max-width: 11ch;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.lede,
|
|
96
|
+
.copy {
|
|
97
|
+
color: var(--muted);
|
|
98
|
+
line-height: 1.6;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.lede {
|
|
102
|
+
margin-top: 16px;
|
|
103
|
+
max-width: 64ch;
|
|
104
|
+
font-size: 1rem;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.metrics {
|
|
108
|
+
margin-top: 24px;
|
|
109
|
+
display: grid;
|
|
110
|
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
111
|
+
gap: 12px;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.metric {
|
|
115
|
+
background: rgba(255, 255, 255, 0.58);
|
|
116
|
+
border: 1px solid rgba(68, 53, 36, 0.1);
|
|
117
|
+
border-radius: 18px;
|
|
118
|
+
padding: 16px;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.metric label {
|
|
122
|
+
display: block;
|
|
123
|
+
color: var(--muted);
|
|
124
|
+
font-size: 12px;
|
|
125
|
+
text-transform: uppercase;
|
|
126
|
+
letter-spacing: 0.08em;
|
|
127
|
+
margin-bottom: 8px;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
.metric [data-method] {
|
|
131
|
+
min-height: 0;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
.stack {
|
|
135
|
+
display: grid;
|
|
136
|
+
gap: 12px;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.toolbar {
|
|
140
|
+
display: flex;
|
|
141
|
+
flex-wrap: wrap;
|
|
142
|
+
gap: 10px;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
.toolbar button,
|
|
146
|
+
button[data-method] {
|
|
147
|
+
border-radius: 16px;
|
|
148
|
+
padding: 12px 16px;
|
|
149
|
+
font-weight: 600;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.primary {
|
|
153
|
+
background: linear-gradient(135deg, #38452f, #526647);
|
|
154
|
+
color: #f7f3ec;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
.secondary {
|
|
158
|
+
background: rgba(255, 255, 255, 0.62);
|
|
159
|
+
color: var(--ink);
|
|
160
|
+
border: 1px solid rgba(68, 53, 36, 0.12);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
.callout {
|
|
164
|
+
padding: 16px;
|
|
165
|
+
border-radius: 18px;
|
|
166
|
+
background: rgba(111, 141, 98, 0.08);
|
|
167
|
+
border: 1px solid rgba(111, 141, 98, 0.14);
|
|
168
|
+
color: var(--muted);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
.warn {
|
|
172
|
+
background: rgba(157, 90, 66, 0.08);
|
|
173
|
+
border-color: rgba(157, 90, 66, 0.14);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
.section-head {
|
|
177
|
+
display: flex;
|
|
178
|
+
justify-content: space-between;
|
|
179
|
+
gap: 12px;
|
|
180
|
+
align-items: flex-start;
|
|
181
|
+
margin-bottom: 14px;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
.section-head h2 {
|
|
185
|
+
margin: 0;
|
|
186
|
+
font-size: 1.1rem;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
.section-head p {
|
|
190
|
+
margin-top: 8px;
|
|
191
|
+
color: var(--muted);
|
|
192
|
+
line-height: 1.55;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
.pill {
|
|
196
|
+
color: var(--amber);
|
|
197
|
+
padding: 6px 10px;
|
|
198
|
+
background: rgba(186, 124, 51, 0.1);
|
|
199
|
+
border: 1px solid rgba(186, 124, 51, 0.14);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
.embed > [data-method] {
|
|
203
|
+
min-height: 120px;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
.embed.compact > [data-method] {
|
|
207
|
+
min-height: 64px;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
.report {
|
|
211
|
+
border-radius: 18px;
|
|
212
|
+
background: rgba(255, 255, 255, 0.56);
|
|
213
|
+
border: 1px solid rgba(68, 53, 36, 0.1);
|
|
214
|
+
padding: 16px;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
.report [data-method] {
|
|
218
|
+
min-height: 180px;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
@media (max-width: 1180px) {
|
|
222
|
+
.hero,
|
|
223
|
+
.grid {
|
|
224
|
+
grid-template-columns: 1fr;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
</style>
|
|
228
|
+
|
|
229
|
+
<div class="shell">
|
|
230
|
+
<section class="hero">
|
|
231
|
+
<div class="panel hero-main">
|
|
232
|
+
<div class="eyebrow">Builder Compass / Photon</div>
|
|
233
|
+
<h1>Turn your builder profile into a money map.</h1>
|
|
234
|
+
<p class="lede">
|
|
235
|
+
Builder Compass stores your profile, classifies your AI-native builder archetype, and
|
|
236
|
+
researches how people like you are making money on the open web. TinyFish is used when you
|
|
237
|
+
explicitly rebuild, not every time you open the dashboard.
|
|
238
|
+
</p>
|
|
239
|
+
|
|
240
|
+
<div class="metrics">
|
|
241
|
+
<div class="metric">
|
|
242
|
+
<label>Fit overview</label>
|
|
243
|
+
<div data-method="fitOverview"></div>
|
|
244
|
+
</div>
|
|
245
|
+
<div class="metric">
|
|
246
|
+
<label>Money paths</label>
|
|
247
|
+
<div data-method="moneyPaths"></div>
|
|
248
|
+
</div>
|
|
249
|
+
<div class="metric">
|
|
250
|
+
<label>Builder report</label>
|
|
251
|
+
<div data-method="report"></div>
|
|
252
|
+
</div>
|
|
253
|
+
</div>
|
|
254
|
+
</div>
|
|
255
|
+
|
|
256
|
+
<aside class="panel stack">
|
|
257
|
+
<div>
|
|
258
|
+
<h2 style="margin: 0">How it works</h2>
|
|
259
|
+
<p class="copy" style="margin-top: 10px">
|
|
260
|
+
Save once, inspect anytime. When your profile changes, update the saved input and rebuild
|
|
261
|
+
the research deliberately.
|
|
262
|
+
</p>
|
|
263
|
+
</div>
|
|
264
|
+
<div class="callout">
|
|
265
|
+
Bring your own TinyFish API key if you want live market research and open-web evidence.
|
|
266
|
+
Without it, Builder Compass still gives a heuristic builder model.
|
|
267
|
+
</div>
|
|
268
|
+
<div class="toolbar">
|
|
269
|
+
<button class="primary" data-method="runCompass" data-target="#report-panel">
|
|
270
|
+
Run full compass
|
|
271
|
+
</button>
|
|
272
|
+
<button class="secondary" data-method="analyzeIdentity" data-target="#identity-panel">
|
|
273
|
+
Refresh identity
|
|
274
|
+
</button>
|
|
275
|
+
<button class="secondary" data-method="researchMarket" data-target="#market-panel">
|
|
276
|
+
Refresh market
|
|
277
|
+
</button>
|
|
278
|
+
</div>
|
|
279
|
+
</aside>
|
|
280
|
+
</section>
|
|
281
|
+
|
|
282
|
+
<section class="grid">
|
|
283
|
+
<div class="column">
|
|
284
|
+
<div class="panel">
|
|
285
|
+
<div class="section-head">
|
|
286
|
+
<div>
|
|
287
|
+
<h2>Profile intake</h2>
|
|
288
|
+
<p>
|
|
289
|
+
Minimal input. Persistent state. This form updates the stored profile and clears stale
|
|
290
|
+
research when your self-model changes.
|
|
291
|
+
</p>
|
|
292
|
+
</div>
|
|
293
|
+
<div class="pill">Persistent</div>
|
|
294
|
+
</div>
|
|
295
|
+
<div class="embed">
|
|
296
|
+
<div data-method="saveProfile"></div>
|
|
297
|
+
</div>
|
|
298
|
+
</div>
|
|
299
|
+
|
|
300
|
+
<div class="panel">
|
|
301
|
+
<div class="section-head">
|
|
302
|
+
<div>
|
|
303
|
+
<h2>Narrative report</h2>
|
|
304
|
+
<p>The reusable guide you can open later without paying the TinyFish cost again.</p>
|
|
305
|
+
</div>
|
|
306
|
+
</div>
|
|
307
|
+
<div class="report" id="report-panel">
|
|
308
|
+
<div data-method="report"></div>
|
|
309
|
+
</div>
|
|
310
|
+
</div>
|
|
311
|
+
</div>
|
|
312
|
+
|
|
313
|
+
<div class="column">
|
|
314
|
+
<div class="panel" id="identity-panel">
|
|
315
|
+
<div class="section-head">
|
|
316
|
+
<div>
|
|
317
|
+
<h2>Identity analysis</h2>
|
|
318
|
+
<p>
|
|
319
|
+
Builder archetype, strengths, work fit, and risks. Cached until you intentionally
|
|
320
|
+
rebuild.
|
|
321
|
+
</p>
|
|
322
|
+
</div>
|
|
323
|
+
<div class="pill">Profile model</div>
|
|
324
|
+
</div>
|
|
325
|
+
<div class="embed compact">
|
|
326
|
+
<div data-method="strengthMatrix"></div>
|
|
327
|
+
</div>
|
|
328
|
+
</div>
|
|
329
|
+
|
|
330
|
+
<div class="panel">
|
|
331
|
+
<div class="section-head">
|
|
332
|
+
<div>
|
|
333
|
+
<h2>Fit dials</h2>
|
|
334
|
+
<p>
|
|
335
|
+
Quick read on AI-native leverage, founder energy, execution reliability, and risk
|
|
336
|
+
load.
|
|
337
|
+
</p>
|
|
338
|
+
</div>
|
|
339
|
+
</div>
|
|
340
|
+
<div class="embed compact">
|
|
341
|
+
<div data-method="fitOverview"></div>
|
|
342
|
+
</div>
|
|
343
|
+
</div>
|
|
344
|
+
</div>
|
|
345
|
+
|
|
346
|
+
<div class="column">
|
|
347
|
+
<div class="panel" id="market-panel">
|
|
348
|
+
<div class="section-head">
|
|
349
|
+
<div>
|
|
350
|
+
<h2>Money paths</h2>
|
|
351
|
+
<p>Research-backed routes ranked by fit, speed to money, demand, and sustainability.</p>
|
|
352
|
+
</div>
|
|
353
|
+
<div class="pill">Market map</div>
|
|
354
|
+
</div>
|
|
355
|
+
<div class="embed compact">
|
|
356
|
+
<div data-method="moneyPaths"></div>
|
|
357
|
+
</div>
|
|
358
|
+
</div>
|
|
359
|
+
|
|
360
|
+
<div class="panel">
|
|
361
|
+
<div class="section-head">
|
|
362
|
+
<div>
|
|
363
|
+
<h2>Usage model</h2>
|
|
364
|
+
<p>Exactly the behavior we want for repeat use.</p>
|
|
365
|
+
</div>
|
|
366
|
+
</div>
|
|
367
|
+
<div class="callout">
|
|
368
|
+
Open the same profile any time to get the stored analysis back immediately.
|
|
369
|
+
</div>
|
|
370
|
+
<div class="callout" style="margin-top: 12px">
|
|
371
|
+
Update the profile only when you’ve actually changed, then rebuild identity and market
|
|
372
|
+
research.
|
|
373
|
+
</div>
|
|
374
|
+
<div class="callout warn" style="margin-top: 12px">
|
|
375
|
+
TinyFish is a rebuild engine here, not a page-refresh tax.
|
|
376
|
+
</div>
|
|
377
|
+
</div>
|
|
378
|
+
</div>
|
|
379
|
+
</section>
|
|
380
|
+
</div>
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoBH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAyC,MAAM,qBAAqB,CAAC;AAEjG,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG5E,OAAO,EAAgB,MAAM,EAAE,aAAa,EAAY,MAAM,oBAAoB,CAAC;AAiBnF,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,KAAK,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;AAE3C,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,KAAK,CAAC;QAAE,WAAW,EAAE,WAAW,CAAC;QAAC,QAAQ,CAAC,EAAE,cAAc,CAAA;KAAE,CAAC,CAAC;IACxE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mFAAmF;IACnF,eAAe,CAAC,EAAE;QAAE,OAAO,EAAE,GAAG,CAAC;QAAC,UAAU,CAAC,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC;IACvD,kFAAkF;IAClF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oEAAoE;IACpE,qBAAqB,CAAC,EAAE,GAAG,CACzB,MAAM,EACN;QAAE,MAAM,EAAE;YAAE,OAAO,EAAE,GAAG,CAAC;YAAC,UAAU,CAAC,EAAE,GAAG,EAAE,CAAA;SAAE,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CACnF,CAAC;IACF,6EAA6E;IAC7E,cAAc,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IACzD,2EAA2E;IAC3E,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC9D;AA+PD,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,GAAG,CAAoC;IAC/C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,gBAAgB,CAAoC;IAC5D,OAAO,CAAC,UAAU,CAAgD;IAClE,OAAO,CAAC,WAAW,CAAsC;IACzD,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,eAAe,CAAC,CAKtB;IACF,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,oBAAoB,CAAyB;IACrD,OAAO,CAAC,UAAU,CAAuB;IACzC,mEAAmE;IACnE,OAAO,CAAC,kBAAkB,CAAC,CAAS;IACpC,uEAAuE;IACvE,OAAO,CAAC,gBAAgB,CAA6B;IACrD,kFAAkF;IAClF,OAAO,CAAC,wBAAwB,CAAS;IACzC;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,qBAAqB,CAA8C;IAC3E,OAAO,CAAC,aAAa,CAQnB;IACF,OAAO,CAAC,MAAM,CAAS;IAEvB,sDAAsD;IACtD,eAAe,IAAI,mBAAmB,GAAG,IAAI;IAI7C,gFAAgF;IAChF,SAAS,IAAI,YAAY;gBAIb,OAAO,EAAE,mBAAmB;IAqEjC,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIzC,SAAS,IAAI,MAAM;IAI1B,OAAO,CAAC,GAAG;IAIX;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAK1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAQrC;IAEF,0CAA0C;IAC1C,OAAO,CAAC,kBAAkB,CAGtB;IAEJ;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAoCzB;;OAEG;IACH,OAAO,CAAC,aAAa;IAIrB;;;;;OAKG;IACH,OAAO,CAAC,yBAAyB;IAYjC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAgC;IAEzE;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,gBAAgB;IAuBxB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAgB7B;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;IA6C9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA8HzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAW1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAuBxB,qGAAqG;IACrG,OAAO,CAAC,eAAe,CAA+D;IACtF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAU;IAEvD;;;OAGG;YACW,uBAAuB;YA2DvB,eAAe;YAgGf,cAAc;IA2R5B,OAAO,CAAC,iBAAiB;YAqBX,eAAe;IAgB7B,OAAO,CAAC,mBAAmB;IA2E3B,OAAO,CAAC,2BAA2B;YAiBrB,kBAAkB;IA2ChC;;OAEG;IACH,OAAO,CAAC,aAAa;IAiLrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAoBpB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAuB5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;OAEG;IACH,OAAO,CAAC,aAAa;IAIrB;;;OAGG;IACH,OAAO,CAAC,eAAe;IAQvB;;;;OAIG;IACH,OAAO,CAAC,cAAc;IA2BtB;;;OAGG;IACH,OAAO,CAAC,WAAW;IA6BnB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAgC7B;;;;;OAKG;YACW,uBAAuB;IAqDrC;;OAEG;YACW,qBAAqB;IA2BnC;;OAEG;YACW,wBAAwB;IA0FtC;;OAEG;IACG,KAAK;IAgGX;;;OAGG;YACW,mBAAmB;IAsBjC;;;;;;;;OAQG;YACW,oBAAoB;IAmDlC;;;;;;;OAOG;IACH,OAAO,CAAC,oCAAoC;IAc5C;;OAEG;YACW,UAAU;IAOxB;;OAEG;YACW,QAAQ;IAygBtB;;OAEG;YACW,cAAc;IAiC5B;;OAEG;YACW,iBAAiB;IAK/B;;OAEG;YACW,mBAAmB;IAwEjC;;OAEG;YACW,gBAAgB;IA+B9B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IA+C5B;;OAEG;IACH;;OAEG;YACW,iBAAiB;IA6C/B;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IA2W7B;;OAEG;YACW,eAAe;IA2C7B;;OAEG;YACW,gBAAgB;IAa9B;;OAEG;IACG,IAAI;IAgDV,OAAO,CAAC,mBAAmB;IA+B3B,OAAO,CAAC,kBAAkB;YAmBZ,qBAAqB;IAyBnC,OAAO,CAAC,gBAAgB;IAOxB;;OAEG;IACH,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAK;IACzC,OAAO,CAAC,kBAAkB,CAAC,CAAiB;IAEtC,MAAM;IAgGZ;;;OAGG;YACW,kBAAkB;CAyBjC"}
|
package/dist/server.js
CHANGED
|
@@ -1125,7 +1125,10 @@ export class PhotonServer {
|
|
|
1125
1125
|
description: ui.linkedTool
|
|
1126
1126
|
? `UI template for ${ui.linkedTool} tool`
|
|
1127
1127
|
: `UI template: ${ui.id}`,
|
|
1128
|
-
|
|
1128
|
+
// Always use MCP Apps mime type for UI resources — photon-core's
|
|
1129
|
+
// getMimeTypeFromPath returns plain text/html which causes Claude
|
|
1130
|
+
// Desktop to skip rendering the app UI
|
|
1131
|
+
mimeType: this.getUIMimeType(),
|
|
1129
1132
|
});
|
|
1130
1133
|
}
|
|
1131
1134
|
for (const prompt of this.mcp.assets.prompts) {
|
|
@@ -1186,7 +1189,10 @@ export class PhotonServer {
|
|
|
1186
1189
|
if (!this.mcp) {
|
|
1187
1190
|
throw new Error('MCP not loaded');
|
|
1188
1191
|
}
|
|
1189
|
-
const { uri } = request.params;
|
|
1192
|
+
const { uri: rawUri } = request.params;
|
|
1193
|
+
const uri = typeof rawUri === 'string'
|
|
1194
|
+
? rawUri.replace(/^ui:\/\/\/([^/]+)\/(.+)$/, 'ui://$1/$2')
|
|
1195
|
+
: rawUri;
|
|
1190
1196
|
const uiMatch = uri.match(/^ui:\/\/([^/]+)\/(.+)$/);
|
|
1191
1197
|
if (uiMatch) {
|
|
1192
1198
|
const [, uiPhotonName, assetId] = uiMatch;
|
|
@@ -2557,6 +2563,14 @@ export class PhotonServer {
|
|
|
2557
2563
|
}
|
|
2558
2564
|
content = await fs.readFile(ui.resolvedPath, 'utf-8');
|
|
2559
2565
|
}
|
|
2566
|
+
// Wrap .photon.html fragments in a full HTML document.
|
|
2567
|
+
// These files contain only <style>, markup, and <script> — no <!doctype> or <html>.
|
|
2568
|
+
// Beam wraps them automatically, but MCP clients (Claude Desktop) need a complete document.
|
|
2569
|
+
const isFragment = !content.trimStart().toLowerCase().startsWith('<!doctype') &&
|
|
2570
|
+
!content.trimStart().toLowerCase().startsWith('<html');
|
|
2571
|
+
if (isFragment) {
|
|
2572
|
+
content = `<!doctype html>\n<html lang="en">\n<head>\n<meta charset="UTF-8">\n<meta name="viewport" content="width=device-width, initial-scale=1.0">\n</head>\n<body>\n${content}\n</body>\n</html>`;
|
|
2573
|
+
}
|
|
2560
2574
|
// Inject MCP Apps bridge script for Claude Desktop compatibility
|
|
2561
2575
|
const bridgeScript = this.generateMcpAppsBridge();
|
|
2562
2576
|
content = content.replace('<head>', `<head>\n${bridgeScript}`);
|