@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.
Files changed (60) hide show
  1. package/dist/auto-ui/beam/photon-management.d.ts +1 -1
  2. package/dist/auto-ui/beam/photon-management.d.ts.map +1 -1
  3. package/dist/auto-ui/beam/photon-management.js +5 -1
  4. package/dist/auto-ui/beam/photon-management.js.map +1 -1
  5. package/dist/auto-ui/beam/routes/api-config.d.ts.map +1 -1
  6. package/dist/auto-ui/beam/routes/api-config.js +2 -1
  7. package/dist/auto-ui/beam/routes/api-config.js.map +1 -1
  8. package/dist/auto-ui/beam.d.ts.map +1 -1
  9. package/dist/auto-ui/beam.js +39 -9
  10. package/dist/auto-ui/beam.js.map +1 -1
  11. package/dist/beam.bundle.js +959 -415
  12. package/dist/beam.bundle.js.map +4 -4
  13. package/dist/claude-code-plugin.js +11 -3
  14. package/dist/claude-code-plugin.js.map +1 -1
  15. package/dist/cli/commands/build.js +1 -1
  16. package/dist/cli/commands/build.js.map +1 -1
  17. package/dist/cli/commands/doctor.d.ts.map +1 -1
  18. package/dist/cli/commands/doctor.js +7 -5
  19. package/dist/cli/commands/doctor.js.map +1 -1
  20. package/dist/cli/commands/info.d.ts.map +1 -1
  21. package/dist/cli/commands/info.js +3 -2
  22. package/dist/cli/commands/info.js.map +1 -1
  23. package/dist/cli/commands/mcp.js +2 -2
  24. package/dist/cli/commands/mcp.js.map +1 -1
  25. package/dist/cli/commands/update.d.ts.map +1 -1
  26. package/dist/cli/commands/update.js +6 -2
  27. package/dist/cli/commands/update.js.map +1 -1
  28. package/dist/cli-alias.d.ts.map +1 -1
  29. package/dist/cli-alias.js +3 -2
  30. package/dist/cli-alias.js.map +1 -1
  31. package/dist/daemon/worker-manager.js +1 -1
  32. package/dist/daemon/worker-manager.js.map +1 -1
  33. package/dist/deploy/cloudflare.d.ts.map +1 -1
  34. package/dist/deploy/cloudflare.js +10 -16
  35. package/dist/deploy/cloudflare.js.map +1 -1
  36. package/dist/loader.d.ts.map +1 -1
  37. package/dist/loader.js +3 -15
  38. package/dist/loader.js.map +1 -1
  39. package/dist/photons/builder-compass.photon.d.ts +167 -0
  40. package/dist/photons/builder-compass.photon.d.ts.map +1 -0
  41. package/dist/photons/builder-compass.photon.js +816 -0
  42. package/dist/photons/builder-compass.photon.js.map +1 -0
  43. package/dist/photons/builder-compass.photon.ts +1129 -0
  44. package/dist/photons/maker.photon.d.ts.map +1 -1
  45. package/dist/photons/maker.photon.js +19 -2
  46. package/dist/photons/maker.photon.js.map +1 -1
  47. package/dist/photons/maker.photon.ts +18 -2
  48. package/dist/photons/ui/builder-compass.html +1199 -0
  49. package/dist/photons/ui/builder-compass.photon.html +380 -0
  50. package/dist/server.d.ts.map +1 -1
  51. package/dist/server.js +16 -2
  52. package/dist/server.js.map +1 -1
  53. package/dist/shared-utils.d.ts +13 -0
  54. package/dist/shared-utils.d.ts.map +1 -1
  55. package/dist/shared-utils.js +33 -0
  56. package/dist/shared-utils.js.map +1 -1
  57. package/dist/template-manager.d.ts.map +1 -1
  58. package/dist/template-manager.js +2 -1
  59. package/dist/template-manager.js.map +1 -1
  60. 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>
@@ -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":"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"}
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
- mimeType: ui.mimeType || this.getUIMimeType(),
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}`);